一. 问题描述
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
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); } } } }