1. 程式人生 > 其它 >Java二叉樹的遍歷

Java二叉樹的遍歷


對於如上二叉樹,分別使用前序遍歷、中序遍歷、後序遍歷遍歷出它的每一個節點
在此之前,先新建一個節點類,節點類屬性包含當前節點的資料(字元)、當前節點的左、右節點。

當不對一個節點的左右節點賦值,由於他們是成員變數且為引用型別,有初始值null,左右子樹不賦值即左右子樹都為null即為葉子結點

  1. 新建TreeNode節點類
public class TreeNode {
	private String Data;
	private TreeNode left;
	private TreeNode right;
	public String getData() {
		return Data;
	}
	public void setData(String data) {
		Data = data;
	}
	public TreeNode getLeft() {
		return left;
	}
	public void setLeft(TreeNode left) {
		this.left = left;
	}
	public TreeNode getRight() {
		return right;
	}
	public void setRight(TreeNode right) {
		this.right = right;
	}
	public TreeNode(String data, TreeNode left, TreeNode right) {
		super();
		Data = data;
		this.left = left;
		this.right = right;
	}
	public TreeNode() {
		super();
	}
	public TreeNode(String data) {
		super();
		Data = data;
	}
	@Override
	public String toString() {
		return Data;
	}
}
  1. 遍歷

對於前序遍歷 先輸出根節點 再輸出左子樹 最後輸出右子樹
對於輸出子樹可以用遞迴實現,當遞迴到節點為null遞迴結束

對於中序遍歷 先輸出左子樹 再出根節點 最後輸出右子樹
對於輸出子樹可以用遞迴實現,當遞迴到節點為null遞迴結束

...
程式碼實現:

public class BinaryTreeErgodic {
	public static void beforePre(TreeNode cur) {
		if(cur==null) {
			return;
		}
		System.out.print(cur+" ");
		beforePre(cur.getLeft());
		beforePre(cur.getRight());
	}
	public static void afterPre(TreeNode cur) {
		if(cur==null) {
			return;
		}
		afterPre(cur.getLeft());
		afterPre(cur.getRight());
		System.out.print(cur+" ");
	}
	public static void midPre(TreeNode cur) {
		if(cur==null) {
			return;
		}
		midPre(cur.getLeft());
		System.out.print(cur+" ");
		midPre(cur.getRight());
	}
}

3.構建二叉樹進行遍歷

	public static void main(String[] args) {
		TreeNode a = new TreeNode("A");
		TreeNode b = new TreeNode("B");
		TreeNode c = new TreeNode("C");
		TreeNode d = new TreeNode("D");
		TreeNode e = new TreeNode("E");
		TreeNode f = new TreeNode("F");
		TreeNode g = new TreeNode("G");
		TreeNode h = new TreeNode("H");
		a.setLeft(b);a.setRight(c);
		b.setLeft(d);b.setRight(f);
		c.setLeft(g);c.setRight(h);
		d.setLeft(e);
		//BinaryTreeErgodic.afterPre(a);
		//BinaryTreeErgodic.midPre(a);
		//BinaryTreeErgodic.beforePre(a);
	}