問題形貌
輸入一棵二叉樹,求該樹的深度。從根結點到恭弘=叶 恭弘結點順次經由的結點(含根、恭弘=叶 恭弘結點)構成樹的一條途徑,最長途徑的長度為樹的深度。
遞歸解法
function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
function Depth(r) {
if(r === null)
return 0;
return Math.max(Depth(r.left), Depth(r.right))+1;
}
非遞歸解法
function TreeDepth(r)
{
if(r === null)
return 0;
var q = [];
var depth = 0;
q.push(r);
// null本來標識當前層是不是遍歷終了
q.push(null);
while(q.length !== 0){
var cur = q.shift();
// 當前彈出元素為null時,申明一層以及遍歷終了了,所以depth+1
if(cur === null){
depth++;
if(q.length!==0)
// 末了一層的null彈出時不能再往行列內里加null了
q.push(null);
}
else{
if(cur.left !== null)
q.push(cur.left);
if(cur.right !== null)
q.push(cur.right);
}
}
return depth;
}