把二元查找树转变成排序的双向链表
来源:互联网 发布:telnet 80端口不通 编辑:程序博客网 时间:2024/06/06 19:37
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
解析:等同于将树中序遍历,同时修改每个节点的指针。
下图是一个二叉查找树,中序遍历为5 7 9 19 12 13 14,修改指针后如下图所示的双链表。
为便以统一,加上由于左儿子在跟前面遍历输出,右儿子在跟后面遍历输出,我们先定义两个输出的节点,先遍历输出的是preNode,后遍历输出的curNode,那么preNode的右儿子指针指向curNode,curNode的左儿子指针指向preNode;然后将curNode赋给preNode,curNode等于栈顶的节点。
上程序。
typedef struct Node Tree;
typedef struct Node TreeNode;
struct Node
{
int data;
structNode * lChild;
structNode * rChild;
};
void transBSTreeToDLink(Tree * T)
{
TreeNode * preNode =NULL;
TreeNode * curNode = T;
stack<TreeNode *> S;
while (curNode !=NULL || !S.empty())
{
while (curNode !=NULL)
{
S.push(curNode);
curNode = curNode->lChild;
}
if (!S.empty())
{
curNode = S.top();
if(preNode !=NULL)
{
curNode->lChild = preNode;
preNode->rChild = curNode;
preNode = curNode;
}
S.pop();
curNode = curNode->rChild;
}
}
}
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- .把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- Sqrt(x)
- C++实现将十进制数转换为小于等于九的任意进制
- 在32位处理器上指针的长度为4字节,为什么是4字节,而不是16字节,或者32字节
- 查找重复数字2
- android 自定义button
- 把二元查找树转变成排序的双向链表
- kmp算法的实现
- hdu2023求品均成绩
- CodeBlock 快捷键大全
- strcpy和memcpy的区别
- linux中pid gid tgid tid的区别和联系
- leetcode 之 Jump Game
- 常见编程题
- Linux下使用socket传输文件的C语言简单实现