zoukankan      html  css  js  c++  java
  • [LeetCode] 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

    大象放入冰箱几步的思路处理这问题就好了

    1.把左子树弄平, 2. 插入到根节点和根节点的右子树之间,3. 反复1。2

    思路不难,代码上有点混乱。细节实现是:把root的左子树弄成flatten的 flatten(root.left),把右子树保存起来 temp=root.right,让root.right=root.left, 然后断掉左边,root.left=null.

    然后一直走到右边的最末端,while(root.right!=null) root=root.right  然后root.right=temp,继续处理。

     一次通过。代码例如以下:

    public void flatten(TreeNode root) {
            if(root==null) return;
            TreeNode p=root;
            while(p!=null){
                if(p.left==null){
                    p=p.right;
                } else {
                    if(p.right==null) {
                        TreeNode temp=p.left;
                        p.left=null;
                        p.right=temp;
                        p=p.right;
                    } else {
                    
                    TreeNode tempRight=p.right;
                    TreeNode tempLeft=p.left;
                    p.right=null;
                    flatten(p.left);
                    p.left=null;
                    p.right=tempLeft;
                    while(p.right!=null){
                        p=p.right;
                    }
                    p.right=tempRight;
                    }
                }
                
            }
            
        }


  • 相关阅读:
    数组与指针
    壁纸
    2019/1/11
    指针A
    数组B
    一起来抓老鼠啊!快乐呀!
    打印沙漏
    I think I need a boat house
    币值转换
    《C语言程序设计》编程总结汇总
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6907589.html
Copyright © 2011-2022 走看看