繁体   English   中英

是否可以在不使用递归或堆栈/队列的情况下获取二叉树的高度?

[英]Is it possible to get the height of a binary tree without using recursion or a stack/queue?

我在C中编写一个程序,它涉及对函数的多次调用,该函数返回二叉树的高度。 最初我使用递归来做它,但很快又回来咬我,因为我得到堆栈溢出错误(不是由于无限递归)。 为了解决这个问题,我试图修改函数以不使用递归并改为使用迭代。 是的,可以使用堆栈/队列执行此操作,但我更愿意不必这样做。

我找到了一个网站,它提供了遍历树的代码而没有递归或堆栈。 这是链接: http//www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/

我试图修改它,以便不是打印出每个节点,而是测量最大深度,但我不确定如何做到这一点。 我该怎么做

您链接到的代码似乎通过修改树以将其转换为线程二叉树来工作 这是一个二叉树,其中每个节点都有一个丢失的子指针,而不是存储空指针,而是存储指向其前导或后继的指针(取决于它是否缺少左子树或右子树)。

这允许您在不需要任何辅助存储空间的情况下导航整个树。 要下降到子树,您可以像往常一样继续。 要爬到父节点,如果当前节点是左子节点,则跟踪原始节点v,然后下降右子节点,直到您在执行此操作的过程中,按照线程备份到v的父节点,你可以识别,因为它将v作为左孩子。 (你可以为正确的孩子做一个类似的技巧)。

您链接到的代码通过从常规的旧二叉树开始并懒惰地插入然后在遍历它时删除线程来工作。 通过跟踪线程并跟踪线程的添加和删除时间,了解如何向上和向下下降,这是一个很好的练习。

直接回答您的问题:是的,可以跟踪树中任何节点的最大深度。 为此,请修改通过插入和删除线程来工作的搜索算法,跟踪您遇到的节点的深度,并在树中向上或向下步进时小心地调整它们。

话虽如此,我很少看到这在实践中完成。 例如,它不适用于多线程(这与此处描述的线程无关)。 不过,这是一次很棒的运动!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM