剑指offer中树的总结(基于树的深度)
虽说把该题归到基于树深度的扩展题目,但是树深度可以看做基于最为基本的前序遍历,中序遍历,后序遍历的递归写法。
求树的深度的程序如下:
public int TreeDepth(TreeNode root) {
if (root==null) {
return 0;
}
int m =TreeDepth(root.left);
int n = TreeDepth(root.right);
if (m>n) {
return m+1;
}else {
return n+1;
}
}
代码非常的简短,完成的功能也是非常的简单。
扩展如下:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在了解平衡二叉树的定义之后,只要分别求出左子树、右子树的高度即可。代码如下:
public boolean IsBalanced_Solution(TreeNode root) {
if (root==null) return true;
else {
int leftDepth = getRootDepth(root.left);
int rightDepth = getRootDepth(root.right);
if (Math.abs(leftDepth-rightDepth)<=1) {
return true;
}
}
return false;
}
int getRootDepth(TreeNode root){
if (root==null) {
return 0;
}
int leftDepth = getRootDepth(root.left);
int rightDepth = getRootDepth(root.right);
if (leftDepth> rightDepth) {
return leftDepth+1;
}else {
return rightDepth+1;
}
}
有人曾说,几乎所有的二叉树的题目算法实现,都是在最为原始的前序、中序、后序遍历的递归写法上进行改造的。后面的示例总结过程中,我也会往这方面去靠。