天天看點

Binary Tree Preorder Traversal @leetcode

在二叉樹方面停留了好長一段時間,各種資料:維基百科的定義、csdn的部落格,java的api使用方法視訊,最近突然發現我對資料結構的了解似乎開始有點質變的現象啦,開始能自己寫出完整正确的代碼啦,欣喜中,再接再厲,為自己加油!今天來貼一段二叉樹遞歸實作先序周遊的完整代碼。

      leetcode原題位址:https://oj.leetcode.com/problems/binary-tree-preorder-traversal/

  解題思路:

題目雖然是建議不用遞歸算法,因目前還沒開始學習疊代的算法思想,是以先暫時用遞歸思想來解。

要實作先序周遊,是以完整程式包含如下幾點

1、建立二叉樹  public void createBinaryTree(TreeNode root){}

2、二叉樹是由結點構成的(即TreeNode),是以建立個TreeNode 類,即 public  class TreeNode{}

3、從維基百科裡了解到二叉樹結點通常通過數組或者線性表來存儲,我這裡采用數組來存儲結點,即ArrayList<Integer>,是以開頭要import java.util.ArrayList;

4、前3個步驟完成之後,現在可以建立先序周遊方法啦,剛剛第3步說用ArrayList來存儲二叉樹結點,是以這麼寫先序周遊方法 public ArrayList<Integer> inordertraversal(TreeNode root){},該方法内的思想要展現出先序周遊的邏輯:通路根節點--》通路左孩子--》通路右孩子

package tree;

import java.util.ArrayList;

public class Preorder_traversal {
	private TreeNode root = null;
	private ArrayList<Integer> res;
	
	public Preorder_traversal(){
		root = new TreeNode(1,1);
	} 
	
	//建立二叉樹
	public void createBinaryTree(TreeNode root){
		TreeNode newNodeB = new TreeNode(2,2);
		TreeNode newNodeC = new TreeNode(3,3);
		root.rightChild = newNodeB;
		root.rightChild.leftChild = newNodeC;
		
	}
	
	//二叉樹由結點構成,是以需要建立TreeNode類
	public class TreeNode{
		private int key = 0;
		private int data = 0;
		private TreeNode leftChild = null;
		private TreeNode rightChild = null;
		
		public TreeNode(int key,int data){
			this.key =  key;
			this.data = data;
			this.leftChild = null;
			this.rightChild = null;
		}
	}
	
	//二叉樹結點通常用數組或線性表進行存儲,這裡選擇使用數組ArrayList才存儲
	public ArrayList<Integer> preorder_Traversal(TreeNode root){
		res = new ArrayList<Integer>();
		helper(root,res);
		return res;
	}
	
	public void helper(TreeNode root,ArrayList<Integer> res){
		if (root == null)
			return ;
		else {
			//helper(root,res);
			res.add(root.data);
			helper(root.leftChild,res);
			helper(root.rightChild,res);
		}
	}
	
	public static void main(String[] args){
		Preorder_traversal bt = new Preorder_traversal();
		bt.createBinaryTree(bt.root);
		bt.preorder_Traversal(bt.root);
		int count = bt.res.size();
		for (int i=0;i<count;i++){
			System.out.print(bt.res.get(i)+" ");
		}
	}
}
           

列印結果如下:

1 2 3