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

     

    Hints:

    If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.

    这题思路:将左子树变成这样,将右子树变成这样,将转换后的右子树先放一边,将转换后的左子树变成根节点的右子树,然后再将前面的右子树添加到这个最右边(遍历到最后再加)。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void flatten(TreeNode root) {
            if(root==null) return ;
           flatten(root.left);//左子树转换
            flatten(root.right);//右子树转换
            
            TreeNode tmp=root.right;//将右子树取出
            root.right=root.left;//将左子树变成根节点的右子树
            root.left=null;//左子树置为Null
            //从根节点开始遍历,一直遍历到最右边节点,然后将上面的tmp加到这个右边。必须从根节点开始,因为左子树可能为空,变成右子树后右子树为空。
            TreeNode cur=root;
            while(cur.right!=null)
                cur=cur.right;
            cur.right=tmp;
            
        }
    }
  • 相关阅读:
    [APIO2014]序列分割
    [HNOI2014]世界树
    [THUWC2017]随机二分图
    快乐游戏鸡
    [SHOI2014]三叉神经树
    带花树学习笔记
    最小树形图——朱刘算法学习笔记
    【WC2018】即时战略
    [HNOI2015]接水果
    [HAOI2018]染色
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8259691.html
Copyright © 2011-2022 走看看