• [LeetCode] 114. Flatten Binary Tree to Linked List 将二叉树展平为链表


    Given a binary tree, flatten it to a linked list in-place.

    For example, given the following tree:

        1
       / 
      2   5
     /    
    3   4   6
    

    The flattened tree should look like:

    1
     
      2
       
        3
         
          4
           
            5
             
              6

    给一个二叉树,把它展平为链表 in-place

    根据展平后的链表的顺序可以看出是先序遍历的结果,所以用inorder traversal。

    解法:递归

    解法:迭代

    Java:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        private TreeNode prev = null;
    
        public void flatten(TreeNode root) {
            if (root == null)
                return;
            flatten(root.right);
            flatten(root.left);
            root.right = prev;
            root.left = null;
            prev = root;
        }
    }  

    Java:

    public void flatten(TreeNode root) {
            if (root == null) return;
            Stack<TreeNode> stk = new Stack<TreeNode>();
            stk.push(root);
            while (!stk.isEmpty()){
                TreeNode curr = stk.pop();
                if (curr.right!=null)  
                     stk.push(curr.right);
                if (curr.left!=null)  
                     stk.push(curr.left);
                if (!stk.isEmpty()) 
                     curr.right = stk.peek();
                curr.left = null;  // dont forget this!! 
            }
        }  

    Python:

    # Definition for a  binary tree node
    class TreeNode:
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    class Solution:
        # @param root, a tree node
        # @return nothing, do it in place
        def flatten(self, root):
            return self.flattenRecu(root, None)
    
        def flattenRecu(self, root, list_head):
            if root != None:
                list_head = self.flattenRecu(root.right, list_head)
                list_head = self.flattenRecu(root.left, list_head)
                root.right = list_head
                root.left = None
                return root
            else:
                return list_head
    

    Python:

    class Solution:
        list_head = None
        # @param root, a tree node
        # @return nothing, do it in place
        def flatten(self, root):
            if root != None:
                self.flatten(root.right)
                self.flatten(root.left)
                root.right = self.list_head
                root.left = None
                self.list_head = root
                return root
    

    C++:

    // Recursion
    class Solution {
    public:
        void flatten(TreeNode *root) {
            if (!root) return;
            if (root->left) flatten(root->left);
            if (root->right) flatten(root->right);
            TreeNode *tmp = root->right;
            root->right = root->left;
            root->left = NULL;
            while (root->right) root = root->right;
            root->right = tmp;
        }
    };
    

    C++:

    class Solution {
    public:
        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);
            }
        }
    };
    

      

      

      

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    Java环境搭建
    Java语言的分支
    Java语言概述
    计算机语言
    人机交互
    计算机分类
    计算机的应用领域
    计算机的发展史
    Java8的一些新特性
    python国内三方库下载镜像
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9699078.html
Copyright © 2020-2023  润新知