题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
方法一:递归
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public int TreeDepth(TreeNode root) { int leftRoot=0; int rightRoot=0; if(root==null) return 0; if(root.left!=null) leftRoot=TreeDepth(root.left); if(root.right!=null) rightRoot=TreeDepth(root.right); return Math.max(leftRoot,rightRoot)+1; } }
方法二:非递归(层序遍历的修改)
public class Solution { public int TreeDepth(TreeNode root) { if(root==null) return 0; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); int count=0,depth=0,nextCount=1; while (!queue.isEmpty()){ TreeNode top=queue.poll(); count++; if(top.left!=null) queue.add(top.left); if(top.right!=null) queue.add(top.right); if(count==nextCount){ nextCount=queue.size(); depth++; count=0; } } return depth; } }