题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
/**
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) {
if(root==null)
return 0;
else if(root.left==null&&root.right==null)
return 1;
else if(root.left!=null&&root.right==null)
return 1+TreeDepth(root.left);
else if(root.left==null&&root.right!=null)
return 1+TreeDepth(root.right);
else
return Math.max(TreeDepth(root.left), TreeDepth(root.right))+1;
}
}
import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> list=new ArrayList<Integer>();//在外部定义,作为公用
public int TreeDepth(TreeNode root) {
if(root==null)//不要漏掉特殊情况
return 0;
traverse(root,0);
int max=list.get(0);
for(int i=0;i<list.size()-1;i++)
{
if(list.get(i)>max)
max=list.get(i);
}
return max;
}
public void traverse(TreeNode root,int num)//将num以参数的形式传递
{
if(root==null)
{
return;
}
num++;
if(root.left==null&&root.right==null)
{
list.add(num);
return;
}
traverse(root.left,num);
traverse(root.right,num);
}
}
//public void traverse(TreeNode root,int num)
//{
//if(root==null)//不建议将此作为递归结束条件,因为叶子结点的左右节点都为空,如果满足条件会重复添加两次
//{
//list.add(num);
//return;
//}
//num++;
//traverse(root.left,num);
//traverse(root.right,num);
//}