将二叉树拆成链表
来源:互联网 发布:淘宝页头图片 编辑:程序博客网 时间:2024/05/04 09:58
1、问题描述
将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。样例
1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6 4 \ 5 \ 6
2、实现思路
按前序遍历,先找到左子树的最右叶子节点,其next为根节点的右子树,根的左子树就变为右子树了,改变根节点为原根节点的右子树,重复之前步骤,直至左子树为空。
3、代码
/**
* 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: nothing
*/
void flatten(TreeNode *root) {
// write your code here
if(root==NULL) return ;
while(root!=NULL)
{ TreeNode *p=new TreeNode;
p=root->left;
if(p!=NULL)
{ while(p->right!=NULL)
p=p->right;
p->right = root->right;
root->right = root->left;
root->left = NULL;
}
root = root->right;
}
}
};
4、感想
要将左儿子标记为 null,否则会得到空间溢出或是时间溢出。重复操作找到左子树的最右叶子节点,其next为根节点的右子树,根的左子树就变为右子树了,改变根节点为原根节点的右子树,直至没有左子树。
- 将二叉树拆成链表
- LintCode: 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode,将二叉树拆成链表
- LintCode 将二叉树拆成链表
- 将二叉树拆成链表-LintCode
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- CodeForces
- mui开发APP教程之创建项目(一)
- 用BASE64将二进制图片写到本地文件中
- 转发:Android项目中,在一个数据库里建立多张表
- 离散数学课本上的最短路径算法
- 将二叉树拆成链表
- Dinic算法(最大流)
- cygwin使用
- php递归和迭代的区别
- 土地利用总体规划数据库问题
- 题目1050:完数
- 从官方例子入手 (详解数据清洗)——kettle实战(5)
- 一位30年程序员工作感悟,值得学习!
- Linux下安装配置Nexus