【编程题】二叉树的深度(Java实现)
题目来源
剑指offer第 题
https://www.nowcoder.com/practice/435fb86331474282a3499955f0a41e8b?tpId=13&tqId=11191&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
题目代码
递归方式
/**
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;
return TreeDepth(root,0);
}
int TreeDepth(TreeNode root,int depth){
if(root==null)
return depth;
int left=TreeDepth(root.left,depth+1);
int right=TreeDepth(root.right,depth+1);
return Math.max(left,right);
}
}
循环方式
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null)
return 0;
LinkedList<TreeNode>list=new LinkedList<>();
ArrayList<Integer>listarr=new ArrayList<>();
list.push(root);
int size=1;
int count=0,depth=0;
while(!list.isEmpty()){
root=list.poll();
count++;
if(root.left!=null)
list.add(root.left);
if(root.right!=null)
list.add(root.right);
if(count==size){
count=0;
size=list.size();
depth++;
}
}
return depth;
}
}