天天看點

搞定二叉樹周遊

  • 1. 理論
    • 1.1 二叉樹
    • 1.2 滿二叉樹
    • 1.3 完全二叉樹
  • 2. 代碼
    • 2.1 思路分析
    • 2.2 代碼樣例

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);
	}
}
           

繼續閱讀