剑指offer---二叉搜索树与双向链表
2017-10-02 18:30
267 查看
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解析:
递归。若左子树非空,左子树建立双链表,连接上根节点,若右子树非空,右子树建立双链表,连接到根节点后面。
代码:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* Convert(TreeNode* pRootOfTree) { /* if(!pRootOfTree) return NULL; if(!pRootOfTree->left&&!pRootOfTree->right) return pRootOfTree; //将左子树构造成双链表,并返回链表头节点 TreeNode *left1=Convert(pRootOfTree->left); TreeNode *p=left1; //定位至左子树双链表最后一个节点 while(!p&&!p->right) p=p->right; //若左子树链表不为空,将当前pRootOfTree追加到左子树链表后面 if(!left1){ p->right=pRootOfTree; pRootOfTree->left=p; } //将右子树构造成双链表,并返回头节点 TreeNode *right1=Convert(pRootOfTree->right); //如果右子树链表不为空,将左子树链表追加到pRootOfTree节点之后 if(!right1){ right1->left=pRootOfTree; pRootOfTree->right=right1; } return left1!=NULL?left1:pRootOfTree;*/ if(!pRootOfTree) return NULL; TreeNode *pointer=NULL; convert2list(pRootOfTree,pointer); while(pointer->left) pointer=pointer->left; return pointer; } void convert2list(TreeNode *pRoot,TreeNode *&pointer){ if(!pRoot) return; if(pRoot->left) convert2list(pRoot->left,pointer); pRoot->left=pointer; if(pointer) pointer->right=pRoot; pointer=pRoot; if(pRoot->right) convert2list(pRoot->right,pointer); } };
相关文章推荐
- 【剑指offer】第三十六题(二叉搜索树与双向链表) 和 第三十七题(序列化二叉树)
- 剑指offer(15)-二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
- 剑指Offer——(26)二叉搜索树与双向链表
- (C++)剑指offer-26:二叉搜索树与双向链表(分解让复杂问题简单)
- 剑指Offer面试题-二叉搜索树与双向链表
- 剑指Offer_面试题27_二叉搜索树与双向链表
- 剑指offer—二叉搜索树与双向链表
- 【剑指offer】之二叉搜索树转双向链表
- 【剑指offer-Java版】27二叉搜索树与双向链表
- 剑指Offer面试题26复杂链表的复制,面试题27二叉搜索树和双向链表(递归)
- 剑指offer 27. 二叉搜索树与双向链表
- 剑指offer-27二叉搜索树与双向链表
- 剑指offer面试题27-二叉搜索树转双向链表
- 剑指offer之面试题27二叉搜索树与双向链表
- 剑指offer_二叉树---二叉搜索树与双向链表
- 【剑指offer】二叉搜索树转双向链表
- 【剑指offer】26二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表(java)