您的位置:首页 > 其它

二叉树的最大深度

2015-10-16 17:02 162 查看
问题: 给定一个二叉树,返回它的最大深度。最大深度是从根节点到最远叶子节点的距离。

1. 递归方法

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
//利用递归的方法从叶子节点向上寻找
public class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
int lnode;
int rnode;
lnode=maxDepth(root.left);
rnode=maxDepth(root.right);
if(lnode>rnode)
return lnode+1;
else
return rnode+1;

}
}


简化版: 只有1行的java代码

public class Solution {
public int maxDepth(TreeNode root) {
return (root == null)?0:Math.max(1+maxDepth(root.left),1+maxDepth(root.right));
}
}


2. 迭代方法

public int maxDepth(TreeNode root) {
if (root == null)
return 0;

Deque<TreeNode> stack = new LinkedList<TreeNode>();//双端队列

stack.push(root);
int count = 0;

while (!stack.isEmpty()) {
int size = stack.size();
while (size-- > 0) {
TreeNode cur = stack.pop();//后进先出
if (cur.left != null)
stack.addLast(cur.left);//添加到队列尾部
if (cur.right != null)
stack.addLast(cur.right);
}
count++;

}
return count;

}


deque 即双端队列

(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2。也可像栈一样,可以用一个铁道转轨网络来比喻双端队列。在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树