使用 C 将二叉树转换为二叉搜索树

标签 c binary-tree binary-search-tree in-place

不使用任何额外空间将二叉树转换为二叉搜索树。我想出了以下算法,但它不起作用。

BTtoBST(节点*根)

1.如果root为NULL则返回

2.else current=root

3.if(当前->左>当前)交换(当前->左,当前)

4.if(当前->右<当前)swap(当前->右,当前)

5.current=当前->左

6 如果当前!=NULL,则转到 3,否则转到 4

7.current=当前->右

提前致谢

PS:我看到了这个链接,但没有多大帮助! Convert Binary Tree -> BST (maintaining original tree shape)

最佳答案

您可以像 AVL 树 http://en.wikipedia.org/wiki/AVL_tree 一样交换包括子树在内的节点(不仅仅是节点内容)

只要违反 BST 约束,就继续交换,每次交换后从根重新启动深度优先搜索。

关于使用 C 将二叉树转换为二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468015/

相关文章:

C汇编代码

c - 如何从 C 中的函数参数中检索函数?

C++ 二叉搜索树插入函数

algorithm - 在二叉搜索树中找到第 k 个最小节点

C - 计算二维矩阵行列式的递归算法

c - printf 为 float 指定整数格式字符串

data-structures - 二叉树到二叉搜索树 (BST)

algorithm - 给出 n 节点二叉搜索树高度的渐近上界,其中节点的平均深度为 Θ(lg n)

algorithm - 具有键值的Haskell二叉树

c++ - BST 的 C++ 回调函数和函数指针问题