求二叉树的最大深度(leetCode-104)使用后序遍历和前序遍历

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。

树的定义:
首先,给出我们将要使用的树的结点 TreeNode 的定义。、

  Definition for a binary tree node.
  public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
  }

解题思路:
二叉树的高度也就是深度,为二叉树中节点层次的最大值,也可以视为其左右子树高度的最大值加1
我们可以使用递归的思想来解这道题

# 算法思想

(1)若树为空,则高度为0
(2)若树非空,则其高度为其左右子树的高度的最大值加1

我们使用二叉树的后序遍历求二叉树高度的递归算法:

后序遍历求解二叉树高度

java代码如下

class Solution {
    public int maxDepth(TreeNode root) {
        int left,right;
        int max;
        if(root != null){
            left = maxDepth(root.left);
            right = maxDepth(root.right);
            max = left>right?left:right;
            return max+1;
        }else
            return 0;
    }
}

前序遍历求二叉树高度

算法思想:

二叉树的高度也就是深度,为二叉树中节点层次的最大值。设根节点为第一层的节点,所有h层节点的左右孩子节点在h+1层,故可以通过遍历计算二叉树中的每个节点的层次,其中最大值为二叉树的高度。

递归代码如下:

	 public int maxDepth2(TreeNode root,int hight){
//		 先序遍历求二叉树root高度的递归算法,hight为二叉树root指向节点所在层次,初始值为1
		 int dept=0; //dept为当前求得得最大层次,为全局变量,调用前初始值为0		 
		 if(root!=null){
			 if(hight>dept){
				 dept=hight;
			 }else{
				 maxDepth2(root.left,hight+1);
				 maxDepth2(root.right,hight+1);
			 }
		 }
		 		 
		 return dept;
	 }

你可能感兴趣的:(java学习)