码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode[Tree]: Flatten Binary Tree to Linked List

时间:2014-12-02 15:19:59      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:leetcode   tree   迭代   递归   前序遍历   

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

递归算法

这种问题非常适合用递归做,每次完成一个节点的转换,剩下的事情都留给递归去做。这里需要处理的问题就是:需要将当前节点的右子树连接至左子树的前序遍历的最后一个节点的right指针。

我的C++代码实现如下:

void flatten(TreeNode *root) {
    if (!root) return;

    if (root->left) {
        TreeNode *pCurNode = root->left;
        if (root->right) {
            while (pCurNode->right) pCurNode = pCurNode->right;
            pCurNode->right = root->right;
        }
        root->right = root->left;
        root->left = nullptr;
    }

    flatten(root->right);
}


迭代算法

跟上面的非常相似,原理也相同,我的C++代码实现如下:

void flatten(TreeNode *root) {
    for (TreeNode *pCurChildRoot = root; pCurChildRoot != nullptr; pCurChildRoot = pCurChildRoot->right)
        if (pCurChildRoot->left) {
            TreeNode *pCurNode = pCurChildRoot->left;
            if (pCurChildRoot->right) {
                while (pCurNode->right) pCurNode = pCurNode->right;
                pCurNode->right = pCurChildRoot->right;
            }
            pCurChildRoot->right = pCurChildRoot->left;
            pCurChildRoot->left = nullptr;
        }
}


LeetCode[Tree]: Flatten Binary Tree to Linked List

标签:leetcode   tree   迭代   递归   前序遍历   

原文地址:http://blog.csdn.net/chfe007/article/details/41677753

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!