第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);
           }  
       }
    }
}

 

posted @ 2019-11-16 14:39  fish大叔  阅读(240)  评论(0编辑  收藏  举报