1、递归来求二叉树的高度
可以先写出递归表达式:
二叉树高度height = Math.max(height[left],height[right])+1;
即左右子树高度的最大值加1,即为树的高度,以此不断递归,最后求出树的高度。
其实也用到了DFS的思想
public static int TreeDepth(TreeNode root) {
if(root==null){
return 0;
}
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
return Math.max(left, right)+1;
}
代码量很少,主要是递归表达式,这里可以将左子树、右子树当成一个整体,用递归来求其高度即可。
2、递归来求二叉树的宽度
**二叉树的宽度定义:**具有最多节点数的层中包含的节点数
暂时没有看到其他更好的方法,这里需要设置两个全局变量,整型max,和数组count[100],数组长度设为足够大,max用来更新宽度,数组用来记录每层的结点数
public static int max = 0;
public static int[] count = new int[100];
//递归方法求二叉树宽度
public static void TreeWidth(TreeNode root, int k){
if (root==null){
return;
}
count[k]++;
max = Math.max(count[k], max);
TreeWidth(root.left, k+1);
TreeWidth(root.right, k+1);
}
最后将max输出即为树的宽度。
用递归虽然代码简单,但其实运行时有一个入栈和出栈的过程。
由于二叉树的自身特性,使得二叉树的问题基本上都可以用到递归。