zoukankan      html  css  js  c++  java
  • [LintCode] Flatten Binary Tree to Linked List 将二叉树展开成链表

    Flatten a binary tree to a fake "linked list" in pre-order traversal.

    Here we use the right pointer in TreeNode as the next pointer in ListNode.

    Notice

    Don't forget to mark the left child of each node to null. Or you will get Time Limit Exceeded or Memory Limit Exceeded.

    Example
                  1
                   
         1          2
        /           
       2   5    =>    3
      /              
     3   4   6          4
                         
                          5
                           
                            6
    

    LeetCode上的原题,请参见我之前的博客Flatten Binary Tree to Linked List

    解法一:

    class Solution {
    public:
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         */
        void flatten(TreeNode *root) {
            if (!root) return;
            stack<TreeNode*> s;
            s.push(root);
            while (!s.empty()) {
                TreeNode *t = s.top(); s.pop();
                if (t->left) {
                    TreeNode *r = t->left;
                    while (r->right) r = r->right;
                    r->right = t->right;
                    t->right = t->left;
                    t->left = NULL;
                }
                if (t->right) s.push(t->right);
            }
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         */
        void flatten(TreeNode *root) {
            if (!root) return;
            if (root->left) flatten(root->left);
            if (root->right) flatten(root->right);
            TreeNode *t = root->right;
            root->right = root->left;
            root->left = NULL;
            while (root->right) root = root->right;
            root->right = t;
        }
    };

    解法三:

    class Solution {
    public:
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         */
        void flatten(TreeNode *root) {
            TreeNode *cur = root;
            while (cur) {
                if (cur->left) {
                    TreeNode * t = cur->left;
                    while (t->right) t = t->right;
                    t->right = cur->right;
                    cur->right = cur->left;
                    cur->left = NULL;
                }
                cur = cur->right;
            }
        }
    };
  • 相关阅读:
    JAVA应用程序占用CPU、内存过高分析过程
    html和css问题?
    html跳动的心实现代码
    css知识点总结
    html注册栏网页练习代码
    前端开发单词大全
    html常用代码合集
    html背景图星际导航图练习
    html迪士尼网页实现代码
    html阿里云网页练习实现代码
  • 原文地址:https://www.cnblogs.com/grandyang/p/5642095.html
Copyright © 2011-2022 走看看