leetcode-114. 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
我这里为了不分情况讨论。先把右节点入队,然后左节点移动给右节点,然后当前节点等于其右节点(如果右节点为空则出队)。这样就避免了分类讨论不过即使分类讨论结果复杂度也差不多。可能还要快一些
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
Stack<TreeNode> sta = new Stack<TreeNode>();
TreeNode tmp = root;
while(tmp!=null){
if(tmp.right!=null){
sta.push(tmp.right);
tmp.right =null;
}
if(tmp.left != null){
tmp.right = tmp.left;
tmp.left = null;
}
if(tmp.right==null && !sta.isEmpty()){
tmp.right = sta.pop();
}
tmp = tmp.right;
}
}
}