• Flatten Binary Tree to Linked List


    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


    利用前序遍历解决的方法实现
    void flatten(TreeNode* root) {
        if (root == nullptr)
            return;
        stack<TreeNode*> sta;
        sta.push(root);
        TreeNode* lastRoot = root;
        while (!sta.empty())
        {
            root = sta.top();
            if (lastRoot != root->right)
            {
                if (lastRoot != root->left) {
                    if (root->left != nullptr) {
                        sta.push(root->left);
                        continue;
                    }
                }
                else
                {
                    TreeNode* tempNode = root->right;
                    root->right = lastRoot;
                    root->left = nullptr;
                    TreeNode* endNode = lastRoot;
                    while (endNode->right != nullptr)
                        endNode = endNode->right;
                    endNode->right = tempNode;
                }
                if (root->right != nullptr) {
                    sta.push(root->right);
                    continue;
                }
            }
            lastRoot = root;
            sta.pop();
        }
    }

    不使用遍历的方法,即不使用栈解决的方法

    void flatten(TreeNode *root) {
        TreeNode*now = root;
        while (now)
        {
            if (now->left)
            {
                //Find current node's prenode that links to current node's right subtree
                TreeNode* pre = now->left;
                while (pre->right)
                {
                    pre = pre->right;
                }
                pre->right = now->right;
                //Use current node's left subtree to replace its right subtree(original right 
                //subtree is already linked by current node's prenode
                now->right = now->left;
                now->left = NULL;
            }
            now = now->right;
        }
    }


  • 相关阅读:
    Cocos2d-x 2.2.3 Android配置
    于ubuntu配置hadoop当问题
    Xenomai 3 和 PREEMPT_RT 有哪些优势相比,
    【安卓注意事项】模仿猎豹清理大师波效应
    JPA实体继承映射
    第26周日许昌夜
    第26周六悲剧许昌夜
    第26黑色周五
    第26周四
    第26周三
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/5224557.html
Copyright © 2020-2023  润新知