分解让复杂问题简单化-面试题27-二叉搜索树与双向链表
来源:互联网 发布:大学软件工程项目 编辑:程序博客网 时间:2024/05/17 07:10
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解法:
如下图所示,找到左子树的最右结点,该结点和根结点形成双向链表,接着找到右子树的最左结点,根结点与该结点形成双向链表,递归
Code:
/*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==NULL) return NULL; if(pRootOfTree->left==NULL && pRootOfTree->right==NULL) return pRootOfTree; TreeNode* pLeftRoot=Convert(pRootOfTree->left); //left List TreeNode* pLeftNode=pLeftRoot; while(pLeftNode!=NULL && pLeftNode->right!=NULL){ pLeftNode=pLeftNode->right; } //定位到左子树的最右边的结点 if(pLeftRoot){ pLeftNode->right=pRootOfTree; pRootOfTree->left=pLeftNode; } //如果左子树链表不为空的话,将当前root和左子树的最右边的结点形成双向关系 TreeNode* pRightRoot=Convert(pRootOfTree->right); //right List TreeNode* pRightNode=pRightRoot; while(pRightNode!=NULL && pRightNode->left!=NULL){ pRightNode=pRightNode->left; } //定位到右子树的最左边的结点 if(pRightRoot){ pRootOfTree->right=pRightNode; pRightNode->left=pRootOfTree; } //如果右子树链表不为空的话,将当前root和右子树的最左边的结点形成双向关系 if(pLeftRoot) return pLeftRoot; else return pRootOfTree; }};
0 0
- 分解让复杂问题简单化-面试题27-二叉搜索树与双向链表
- 【剑指offer】4.4分解让复杂问题简单化——面试题27:二叉搜索树与双向链表
- 剑指offer:(27)分解让复杂问题简单化 :二叉搜索树与双链表
- 【剑指offer】4.4分解让复杂问题简单化——面试题26:复杂链表的复制
- 分解让复杂问题简单化-面试题28-字符串的排列与组合
- 《剑指offer》刷题笔记(分解让复杂问题简单):二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 【剑指offer】4.4分解让复杂问题简单化——面试题28:字符串的排列
- 面试题24:二叉搜索树与双向链表
- 面试题31:二叉搜索树与双向链表
- 欢迎使用CSDN-markdown编辑器
- 您不得不知道的一件大事——Internet of things
- 基础类库:包装类
- 292_ActionBar的使用
- 位运算
- 分解让复杂问题简单化-面试题27-二叉搜索树与双向链表
- 293_AndroidStudio常用快捷键
- SVN教程(一)
- 【NOIP 2016】斗地主
- Intellij下进行junit测试
- 【Java并发】JAVA并发编程实战-读书笔记2
- 第65篇Chrome扩展蓝牙及USB开发(二)
- Android 中的线程应用_项海涛
- 294_AndroidStudio下的dependencies