已知一个二叉树,求它的高。空树的树高是0,下面的树的树高是3。
递归地计算一个节点的左右子树的树高,将高度设值为两个孩子最大高度加1。看下面的伪代码和程序的详细情况。
算法:
package learn.java.cn.data.stru;
class Node{
int var ;
Node left,right;
Node(int var)
{
this.var=var;
left=right=null;
}
}
public class BinTree_depth {
Node root;
public int Max_Depth(Node node)
{
if(node==null)
return 0;
else
{
int LDepth=Max_Depth(node.left);
int RDepth=Max_Depth(node.right);
return LDepth>RDepth?LDepth+1:RDepth+1;
}
}
public static void main(String[] args)
{
BinTree_depth tree=new BinTree_depth();
tree.root=new Node(1);
tree.root.left=new Node(2);
tree.root.right=new Node(3);
tree.root.left.left=new Node(4);
tree.root.left.right=new Node(5);
int max_depth=tree.Max_Depth(tree.root);
System.out.println(max_depth);
}
}
maxDepth()
1. 如果树为空,那么返回0
2. 否则
(a) 递归得到左子树的最大高度
例如,调用maxDepth( tree->left-subtree)
(b) 递归得到右子树的最大高度
例如,调用maxDepth( tree->right-subtree)
(c) 对于当前节点,取左右子树高度的最大值并加1。
max_depth = max(左子树的最大高度, 右子树的最大高度) + 1
(d) 返回max_depth