zoukankan      html  css  js  c++  java
  • 第114题:二叉树展开为链表

    一. 问题描述

    给定一个二叉树,原地将它展开为链表。

    例如,给定二叉树

          1

         / 

       2     5

      /        

    3   4       6

    将其展开为:

     1

       

         2

           

             3

               

                  4

                     

                       5

                         

                            6

    二. 解题思路

    本题思路:采用深度优先遍历+栈的方式进行求解。

    步骤一:将root节点的左右子树置于栈中。

    步骤二:当栈不为空时,从栈中取出顶元素,并将其右子树置于栈然后将其左子树置于栈中,并将取出的栈顶元素放置到root的右子树,并将左子树置为空。

    步骤三:root=root.right,重复步骤二,直到结束。

    三. 执行结果

    执行用时 :2 ms, 在所有 java 提交中击败了25.00%的用户

    内存消耗 :35.9 MB, 在所有 java 提交中击败了81.11%的用户

    四. Java代码

    class Solution {
        public void flatten(TreeNode root) {
          if(root==null) {
                return;
            }
           Stack<TreeNode> stack=new Stack<TreeNode>();
           if(root.right!=null) {
               stack.push(root.right);
           }
           if(root.left!=null) {
               stack.push(root.left);
           }
           while(!stack.isEmpty()) {
               TreeNode temp=stack.pop();
               root.right=temp;
               root.left=null;
               root=root.right;
               if(temp.right!=null) {
                   stack.push(temp.right);
               }
               if(temp.left!=null) {
                   stack.push(temp.left);
               }  
           }
        }
    }
  • 相关阅读:
    Linux进程间通信—消息队列
    Linux进程间通信—信号
    Linux进程间通信—信号量
    Linux进程间通信—管道
    Linux进程间通信:管道,信号量,消息队列,信号,共享内存,套接字
    安全文件传输系统
    嵌入式mp3播放器
    用C语言实现面向对象的开发
    Haskell 差点儿无痛苦上手指南
    Oracle EBS 入门
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11871763.html
Copyright © 2011-2022 走看看