題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
思路分析
先複習一下概念
樹的深度:以
二叉樹的根結點所在的層數為1,根結點的孩子結點所在的層數為2,以此下去。深度是指所有結點中最深的結點所在的層數。
遞迴思路:樹的深度為左右子樹深度的較大值+1,以此遞迴到底層,即可得出答案
迴圈思路:借鑑之前列印二叉樹的思路,層序遍歷,設定一變數,記錄遍歷的層數。
**
遞迴
//遞迴
public int treedepth(treenode root)
int left = treedepth(root.left);
int right = treedepth(root.right);
return math.max(left, right)+1; }
public class treenode
}
結果
迴圈
//迴圈
public int treedepth(treenode root)
queuequeue = new linkedlist();
arraylistlist1 = new arraylist();
queue.offer(root);
int start = 0; //當前層數已新增節點數
int end = 1; //當前層數目標新增節點數
int count = 0; //記錄層數
while (!queue.isempty())
if (temp.right != null)
if (start == end)
}return count;
}
結果
劍指Offer38 平衡二叉樹
思路 判斷是否是平衡二叉樹,即判斷任何乙個節點的左子樹和右子樹的高度差的絕對值小於等於1。最直接的做法,遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷。class treenode def init self,x self.val x...
劍指offer38 平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路 平衡二叉樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。判斷兩邊高度,我這裡想著用誰子樹沒了就會在和左子樹的比較中比較會等於 1,然後...
劍指offer 38 二叉樹的深度
題目 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 求深度,第一次能想到的方法就是遞迴,但是除了遞迴還有層次遍歷,本文提供遞迴和層次遍歷兩種解法。遞迴思想就是 求左右子樹,然後深度各加一,再比較哪個大,然後返回哪個。層次...