1. 程式人生 > >二叉樹高度、寬度計算

二叉樹高度、寬度計算

二叉樹高度可以採用遞迴計算

public class TreeNode{
	Data value;
	TreeNode left;
	TreeNode right;
	
	TreeNode(Data data,TreeNode left,TreeNode right) {
		this.data = data;
		this.left = left;
		this.right = right;
	}
}

public int getDeep(TreeNode root) {
	if (root == null) {
		return 0;
	} else {
		int left =
getDeep(root.left); int right = getDeep(root.right); return Math.max(left,right) + 1; } }

二叉樹寬度可以採用計算迭代和遞迴,優先看看迭代計算:

// 從根節點,一層一層的計算寬度,保留最大寬度
public int getWeight(TreeNode root) {
	if (root == null) {
		return 0;
	}
	Queue<TreeNode> queue = new ArrayDeque<>();
	int maxWeight = 1;
queue.add(root); // 一層一層迭代 while(true) { int len = queue.size(); if(len == 0) { break; } // 每一層遍歷所有節點 while( len >0 ){ // 獲取並刪除佇列中的頭部節點 TreeNode t = queue.poll(); len--; // 新增下一層的子節點到佇列 if(t.left != null){ queue.add(t.left); } if(t.right != null){ queue.add(t.right)
; } maxWeight = Math.max(maxWeight,queue.size()); } } return maxWeight; }

再來看看遞迴演算法:

public int getWeight(TreeNode root) {
	if(root == null){
		return 0;
	}
	int maxWeight = 0;
	if(root.left == null && root.right == null) {
		return 1;
	} else {
		// 遞迴到葉子節點層,計算其寬度,然後迭代到根節點
		maxWeight = Math.max(getWeight(root.left)+getWeight(root.right),maxWeight);
	}
	return maxWeight;
}

在這裡插入圖片描述

在這裡插入圖片描述