zoukankan      html  css  js  c++  java
  • Flatten Binary Tree to Linked List leetcode java

    题目:

    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

    题解
    如hint所给出,这道题就是使用先序遍历,遍历到的值作为新的右孩子存起来,左孩子变为空。
    注意的是,因为右孩子会更新,所以为了递归右子树,要在更新之前提前保存右孩子。
    整个程序需要维护一个全局变量,保存当前所遍历的节点。

    代码如下:
     1   TreeNode lastvisited = null;
     2     public void flatten(TreeNode root) {
     3         if(root == null)
     4             return;
     5         
     6         TreeNode realright = root.right;
     7         if(lastvisited != null){
     8             lastvisited.left = null;
     9             lastvisited.right = root;
    10         }
    11         
    12         lastvisited = root;
    13         flatten(root.left);
    14         flatten(realright);
    15     }
    Reference:http://blog.csdn.net/perfect8886/article/details/20000083

    此题还有不用递归方法解决的方法,那就是使用栈。
    对整棵树一直向右子树方向遍历。当遍历的节点有右孩子时,就将其入栈。有左孩子时,将其更新为当前节点的右孩子,左孩子置空。当左孩子为空时而栈不空时,
    就弹出栈,作为右孩子。代码如下:
     1     public void flatten(TreeNode root) {
     2         Stack<TreeNode> stack = new Stack<TreeNode>();
     3         TreeNode p = root;
     4  
     5         while(p != null || !stack.empty()){
     6  
     7             if(p.right != null){
     8                 stack.push(p.right);
     9             }
    10  
    11             if(p.left != null){
    12                 p.right = p.left;
    13                 p.left = null;
    14             }else if(!stack.empty()){
    15                 TreeNode temp = stack.pop();
    16                 p.right=temp;
    17             }
    18  
    19             p = p.right;
    20         }
    21     }
    Reference: //http://www.programcreek.com/2013/01/leetcode-flatten-binary-tree-to-linked-list/

  • 相关阅读:
    分享一个js方法
    微信小程序中如何使用setData修改数组或对象中的某一参数
    微信小程序实现图片上传功能
    微信小程序图片上传放大预览删除代码
    小程序单张图片 和 九宫格图片上传、预览、删除示例
    微信小程序多图上传/朋友圈传图效果【附完整源码】
    shell 和awk性能对比
    超实用的8个Linux命令行性能监测工具
    storm分组模式
    Python程序的执行原理(转)
  • 原文地址:https://www.cnblogs.com/springfor/p/3864355.html
Copyright © 2011-2022 走看看