Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
6
Hints:
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
题目意思是把一个二叉树给拍扁,仔细观察下其实就是先序遍历,提示里也说了是先序遍历,最直观的可以相当先把先序遍历的结果存起来,再一个一个接到右边,但总感觉很low,可以直接先序遍历的时候进行操作,同样,如果要接的话肯定要用到额外的一个节点tail,先序遍历的时候每次把当前节点接到tail的右边,然后tail的左边置空,再把当前节点赋给tail。
class Solution {
public:
TreeNode* tail=NULL;//当前指针
void preorder(TreeNode*root)
{
if (root!=NULL)
{
TreeNode*left=root->left;
TreeNode*right = root->right;
if (tail==NULL)//根节点
{
tail = root;
}
else
{
tail->right = root;
tail->left = NULL;
tail = root;
}
preorder(left);
preorder(right);
}
}
void flatten(TreeNode* root) {
if (!root) return;
preorder(root);
}
};
本文介绍了一种将二叉树转换为链表的方法,通过先序遍历的方式,将二叉树的每个节点连接成单链表形式。具体实现中使用了一个额外的节点tail来辅助操作。
294

被折叠的 条评论
为什么被折叠?



