剑指offer_38:输入一棵二叉树,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89475803

/**
 * 输入一棵二叉树,求该树的深度。
 * 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
 */

思路一: 先看递归遍历

public class TreeDepth {
	/**
     * 递归版本
     */
	public 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; 
		
    }

说实话,第一眼我也没看懂这个操作,但是稍微一想,你们其实在做递归的时候,你们就像想成一个

当遍历到叶子节点的时候,那个int就有值了,就会自动返回1.这样就会累计了。

说实话,递归好烦,看的人烦。

思路儿:层次遍历

就是用队列,层次遍历树,依次的去depth++;

/**
	 * 非递归,层序遍历
	 * @param args
	 */
	public int depth(TreeNode root) {
		if (root==null) {
			return 0;
		}
		Queue<TreeNode> queue=new LinkedList<>();
		int depth=0;
		queue.offer(root);
		while (queue.isEmpty()) {
			int size=queue.size();
			for (int i = 0; i < size; i++) {
				TreeNode node=queue.poll();
				if (node.left!=null) {
					queue.offer(node.left);
				}
				if (node.right!=null) {
					queue.offer(node.right);
				}
			}
			depth++;
		}
		
		return depth;
	}
	

猜你喜欢

转载自blog.csdn.net/u012429555/article/details/89475803
今日推荐