栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在没有递归的情况下找到二叉树的最大深度

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在没有递归的情况下找到二叉树的最大深度

此变体使用两个堆栈,一个用于其他节点进行探索(

wq
),另一个始终包含来自根的当前路径(
path
)。当我们在两个堆栈的顶部看到相同的节点时,这意味着我们已经浏览了其下方的所有内容并可以将其弹出。这也是更新树深的时候。在随机树或平衡树上,附加空间应为O(log
n),当然在最坏的情况下为O(n)。

static int maxDepth (Node r) {    int depth = 0;    Stack<Node> wq = new Stack<>();    Stack<Node> path = new Stack<>();    wq.push (r);    while (!wq.empty()) {        r = wq.peek();        if (!path.empty() && r == path.peek()) { if (path.size() > depth)     depth = path.size(); path.pop(); wq.pop();        } else { path.push(r); if (r.right != null)     wq.push(r.right); if (r.left != null)     wq.push(r.left);        }    }    return depth;}

(无耻的插件:我有几个星期前使用双栈进行非递归遍历的想法,请在此处检查C ++代码http://momchil-
velikov.blogspot.com/2013/10/non-recursive-tree-
traversal.html

并不是说我是第一个发明它的人:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号