平衡二叉树转化为双向链表
来源:互联网 发布:学费软件 编辑:程序博客网 时间:2024/04/29 09:49
很容易想到递归,实现确实不是太容易,对本人来说。
平衡二叉树是有序的,要求链表也是有序。
\
代码:
#include<iostream> //平衡二叉树转化为双向链表using namespace std;typedef struct tree{int data;struct tree *lchild;struct tree *rchild;}Tree,*pTree;void createBST(pTree &pHead){int temp;scanf("%d",&temp);if(temp){pHead = new Tree();pHead->data = temp;createBST(pHead->lchild);createBST(pHead->rchild);}else{pHead = NULL;areturn ;}}void print(pTree p){if(p){print(p->lchild);cout<<p->data<<" ";print(p->rchild);}else{ return ;}}void convertList(pTree root,pTree * pLastNode){if(root == NULL)return ;pTree cur = root;if(cur->lchild != NULL){convertList(root->lchild,pLastNode);}cur->lchild = *pLastNode;if(*pLastNode != NULL){(*pLastNode)->rchild = cur;}*pLastNode = cur;if(cur->rchild != NULL){convertList(cur->rchild,pLastNode);}}void printList(const pTree cur1){pTreecur = cur1;while(cur){cout<<cur->data<<" ";cur = cur->rchild;}}pTree convert(pTree root){if(NULL == root)return root;pTree pLastNode = NULL;convertList(root,& pLastNode);pTree pHead = pLastNode;while(pHead != NULL && pHead ->lchild != NULL){pHead = pHead->lchild;}return pHead;}int main() { pTree pHead = NULL;createBST(pHead);cout<<"原平衡二叉树的中序遍历:";print(pHead);cout<<endl;cout<<"链表的从左到右序列:";pTree pHead1=convert(pHead);printList(pHead1); return 0; }
0 0
- 平衡二叉树转化为双向链表
- 二叉树------二叉查找树转化为双向链表
- 平衡二叉搜索树BST转换为双向链表
- 把二叉树转化为双向链表的源码
- 二叉搜索树转化为双向链表
- 二叉搜索树转化为双向链表
- 将二叉树转化为双向链表
- 二叉搜索树转化为双向链表
- 二叉树转化为排序的双向链表
- 二叉查找树转化为双向链表
- 二叉搜索树转化为有序双向链表
- 搜索二叉树转化为双向链表
- 二叉搜索树转化为双向链表
- 将二叉搜索树转化为双向链表
- 二叉搜索树转化为有序双向链表
- 将搜索二叉树转化为双向链表
- 二叉搜索树转化为双向链表
- 将二叉搜索树转化为双向链表
- C#弹出对话框
- 有序链表查找的时间复杂度是O(n)的原因是
- C语言的指针、数组和函数的联系
- Android自定义控件实战——滚动选择器PickerView
- Ubuntu 配置网络命令
- 平衡二叉树转化为双向链表
- POJ3692——Kindergarten
- 监控机为Linux主机的nagios安装与配置之利用snmp方式监控远程主机上的“本地信息”
- Web.xml配置详解之context-param
- Swift(二)
- hdu1004 Let the Balloon Rise
- 所有时间都不是虚度的,经过定有痕迹
- eclipse生成注释
- VIM配置文件vimrc