题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:遍历二叉树,记录每一条路线的深度并选出最大的。
public class Solution {
private int result = 0;
public int TreeDepth(TreeNode root) {
return TreeDepth(root,0);
}
public int TreeDepth(TreeNode root,int depth){
if(root!=null){
depth++;
TreeDepth(root.left,depth);
TreeDepth(root.right,depth);
}else{//表示到了叶子节点,比较出较大的深度
if(depth>result){
result = depth;
}
}
return result;
}
}
不用递归思路:用队列对二叉树进行行遍历,记录总高度。
import java.util.ArrayList;
public class Solution {
public int TreeDepth(TreeNode root) {
ArrayList<TreeNode> list = new ArrayList();
if(root!=null){
list.add(root);
int count = 0;//当前行已经遍历的节点数
int nextCount = 1;//当前行要遍历的节点总数
int depth = 0;//深度
while(list.size()!=0){
TreeNode top = list.remove(0);
count++;
if(top.left!=null){
list.add(top.left);
}
if(top.right!=null){
list.add(top.right);
}
if(count == nextCount){//如果当前行已经遍历完,则深度+1
nextCount = list.size();
count = 0;
depth++;
}
}
return depth;
}
return 0;
}
}