LeetCode-Flatten Binary Tree to Linked List-二叉树展开成链表-二叉树递归

https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/

实现一个返回值为子树r展开后最右边节点的函数。然后使用这个函数适当的将展开后的右子树移到左子树的尾部,再将left指针置为0即可。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode *Solve(TreeNode *rt){
        if (!rt->left && !rt->right) return rt;
        TreeNode *el=NULL;
        TreeNode *er=NULL;
        if (rt->left) el=Solve(rt->left);
        if (rt->right) er=Solve(rt->right);
        if (rt->left) {
            el->right=rt->right;
            rt->right=rt->left;
            rt->left=NULL;
        }
        if (er) return er;
        return el;
    }
    void flatten(TreeNode *root) {
        if (!root) return;
        Solve(root);
    }
};
View Code

 

posted @ 2014-10-14 00:04  zombies  阅读(161)  评论(0编辑  收藏  举报