将二叉树拆成链表
来源:互联网 发布:加内特2004季后赛数据 编辑:程序博客网 时间:2024/06/08 16:47
一.题目描述
将一棵二叉树按照前序遍历拆解成为一个假链表
。所谓的假链表是说,用二叉树的 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: nothing */ void flatten(TreeNode *root) { // write your code here if(root==NULL) return; TreeNode *left=root->left; TreeNode *right=root->right; TreeNode *p=new TreeNode; flatten(left); flatten(right); if(left!=NULL) { p=left; while(p->right!=NULL) { p=p->right;} root->left=NULL; root->right=left; p->left=NULL; p->right=right; } }};
四.感悟
这道题的难点在于如何将左子树和右子树连起来,需要找到左子树的最后一个节点,将其与右子树的第一个节点连在一起.
0 0
- 将二叉树拆成链表
- LintCode: 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode,将二叉树拆成链表
- LintCode 将二叉树拆成链表
- 将二叉树拆成链表-LintCode
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- lintcode将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- 将二叉树拆成链表
- Linux下mysql备份
- Java学习笔记 Day04 (for循环嵌套、函数以及函数重载、数组)
- 排序算法01:冒泡排序
- springBoot发送邮件
- 【C++学习笔记】if条件分支
- 将二叉树拆成链表
- UVa 11809 Floating Point Numbers
- html 的 meta 总结,html 标签中 meta 属性使用介绍
- Codeforces Round #410 (Div. 2) Mike and gcd problem 思维
- 第十四届浙江省赛 ZOJ 3962 Seven Segment Display(数位DP)
- 排序算法02:选择排序
- Linux进程描述
- 用Python&OpenGL采用种子递归法填充汉字
- DialogFragUtil 打造一款DialogFragment的统一封装类