3.Maximum Depth of Binary Tree

Maximum Depth of Binary Tree

leetcode上原题目为:

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

分析:题目的意思是给定一个二叉树,求二叉树的最大深度,即根节点到叶子节点长度最大的路径上节点个数。

在实现的过程中,我采用的是递归调用的方法,类似于二叉树深度优先变量(DFS)。

首先判断输入的节点是否为空,若为空则返回深度为0;否则返回的应该是左右子树的最大深度值加1。

附我的代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int maxDepth(TreeNode root) {
            if(root == null){
                return 0;
            }
            int lh=0;
	    	int rh=0;
	    	lh = maxDepth(root.left);
	    	rh = maxDepth(root.right);
	    	if(lh>=rh){
	    		return lh+1;
	    	}
	    	else{
	    		return rh+1;
	    	}
    }
}

整理之后

/**
	 * 采用递归的思想做。一棵树的最大深度为其左子树和右子树中深度较大者+1.
	 */
	public int TreeDepth(TreeNode root) {
	if(root == null){
        return 0;
    }else{
    	return Math.max(TreeDepth(root.left), TreeDepth(root.right))+1;
    }
    }


另外,完成了自己的代码之后在网上看到有人用宽度优先遍历(BFS)实现如下:

int maxDepth2(TreeNode root)
	     {
	         if (root == null){
	             return 0;
	         }
	           Queue<TreeNode> que = new LinkedList<TreeNode>();
	           int nCount = 1;
	           int nDepth = 0;// 记录队列里面每一层上的元素
	       
	           que.add(root);
	           
	           while(!que.isEmpty()) {
	               TreeNode pTemp = que.poll();
	               nCount --;
	       
	               if (pTemp.left != null)
	                   que.add(pTemp.left);
	               if (pTemp.right !=null)
	                   que.add(pTemp.right);
	              
	               if (nCount == 0) {
	                   nDepth ++;//记录的是同一层上的节点数
	                   nCount = que.size();//记录的是同一层上节点个数
	               }
	           }
	           return nDepth;
	       }







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值