搞定二叉樹遍歷

1.理論

1.1 二叉樹

每個節點最多隻有兩個子節點的樹

1.2 滿二叉樹

所有的葉子節點都在最後一層,並且節點總數 2^n-1 n 爲層數

1.3 完全二叉樹

所有的葉子節點都在最後一層或者倒數第二層,而且最後一層的葉子節點在左邊連續,倒數第二層的葉子節點在右邊連續

2.代碼

2.1 思路分析

前序:先輸出父節點,再遍歷左子樹和右子樹

中序:先遍歷左子樹,再輸出父節點,再遍歷右子樹

後序:先遍歷左子樹,再遍歷右子樹,最後輸出父節點

2.2 代碼樣例

class BinaryTree {
	private HeroNode root;
	
	public void setRoot(HeroNode root) {
		this.root = root;
	}
	
	//前序遍歷
	public void preOrder() {
		if (this.root != null) {
			this.root.preOrder();
		}
	}
	
	public void infixOrder() {
		if (this.root != null) {
			this.root.infixOrder();
		}
	}
	
	public void postOrder() {
		if (this.root != null) {
			this.root.postOrder();
		}
	}
}

class HeroNode {
	private int no;
	private String name;
	private HeroNode left;
	private HeroNode right;
	
	public HeroNode(int no, String name) {
		this.no = no;
		this.name = name;
	}
	
	public int getNo() {
		return no;
	}
	
	public void setNo(int no) {
		this.no = no;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public HeroNode getLeft() {
		return left;
	}
	
	public void setLeft(HeroNode left) {
		this.left = left;
	}
	
	public HeroNode getRight() {
		return right;
	}
	
	public void setRight(HeroNode right) {
		this.right = right;
	}
	
	@Override
	public String toString() {
		return "HearNode{" +
				"no=" + no +
				", name='" + name + '\'' +
				'}';
	}
	
	//前序遍歷
	public void preOrder() {
		System.out.println(this);
		
		if (this.left != null) {
			this.left.preOrder();
		}
		
		if (this.right != null) {
			this.right.preOrder();
		}
	}
	
	//中序遍歷
	public void infixOrder() {
		if (this.left != null) {
			this.left.infixOrder();
		}
		System.out.println(this);
		
		if (this.right != null) {
			this.right.infixOrder();
		}
	}
	
	//後序遍歷
	public void postOrder() {
		if (this.left != null) {
			this.left.postOrder();
		}
		
		if (this.right != null) {
			this.right.postOrder();
		}
		System.out.println(this);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章