将二叉树拆成链表
来源:互联网 发布:网络经济学ppt 编辑:程序博客网 时间:2024/06/15 08:34
将一棵二叉树按照前序遍历拆解成为一个假链表
。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
注意事项
不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。
样例
1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6 4 \ 5 \ 6
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution {public: /* * @param root: a TreeNode, the root of the binary tree * @return: */ void flatten(TreeNode * root) { // write your code here if(root == NULL)//root为空直接返回 { return ; } else if(root->left == NULL &&root->right == NULL)//root左右节点为空,直接返回 { return ; } else if(root->left != NULL && root->right == NULL)//左节点不为空,右节点为空 { root->right = root->left;//根节点的右节点指向原来的左节点 root->left = NULL;//根节点原来节点置为NULL flatten(root->right);//对右节点重新调整 } else if(root->left == NULL && root->right != NULL)//左节点为空,右节点不为空 { flatten(root->right);//直接对右节点调整 } else//左右节点都不为空,对左节点调整后,找到左节点调整后的首端和尾端,首端连接根节点的右节点,尾端连接根节点原来的右节点,在对原 //来右节点调整 { flatten(root->left);//对左节点调整 TreeNode *temp1 = root->left;//用来存左节点调整后的尾端 while(temp1->right != NULL)//找尾端 { temp1 = temp1->right; } temp1->right = root->right;//尾端的右节点连接原来根节点的右节点 root->right = root->left;//根节点的右节点连接调整左节点的首端及原左节点 root->left = NULL;//跟节点的左节点置为空 flatten(temp1->right);//对跟节点的原右节点调整 } }};
阅读全文
0 0
- 将二叉树拆成链表
- LintCode: 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode,将二叉树拆成链表
- LintCode 将二叉树拆成链表
- 将二叉树拆成链表-LintCode
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 【easyui】解决easyui闪屏问题
- Qt 学习之路 2(50):自定义可编辑模型
- Android SDK下载速度慢无法更新?使用国内镜像站加速!
- Service中stopSelf(int startId)说明
- 【NOIP】借教室(线段树)
- 将二叉树拆成链表
- POJ 2828 线段树
- ubuntu的recovery mode下修改文件(写操作)
- live555客户端实现流程步骤
- Qt 学习之路 2(51):布尔表达式树模型
- C++中有符号整数的取值范围
- MyBatis逆向工程
- Hibernate 查询方法get与load的不同
- C++基础-构造函数/析构函数/拷贝构造