二叉树的深度 - 非递归
二叉树的深度
http://www.nowcoder.com/questionTerminal/435fb86331474282a3499955f0a41e8b
给各位一个非递归的傻办法:
/**
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 class TreeNodeBfs{//新数据结构,新增了节点的深度
TreeNode root;
int depth;
public TreeNodeBfs(TreeNode root1,int depth1){
this.depth = depth1;
this.root = root1;
}
}
public int TreeDepth(TreeNode root){
if(root == null){//空树则返回0
return 0;
}
TreeNodeBfs rootNew = new TreeNodeBfs(root,1);
return BfsDepth(rootNew);
}
public int BfsDepth(TreeNodeBfs root){
Queue queue = new LinkedList();
queue.offer(root);//根节点入队列
int maxDepth = 1;
while(queue.size()!=0){//只要队列仍然有内容,将左&右入队,左&右的深度为当前的深度+1,将当前的出队
if(queue.peek().root.left!=null){
int newDepth = queue.peek().depth+1;
queue.offer(new TreeNodeBfs(queue.peek().root.left,newDepth));
}
if(queue.peek().root.right!=null){
int newDepth = queue.peek().depth+1;
queue.offer(new TreeNodeBfs(queue.peek().root.right,newDepth));
}
if(queue.peek().depth>maxDepth){
maxDepth = queue.peek().depth;
}
queue.poll();
}
return maxDepth;
}
}
