Get preOrder List, then reset the pointer
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
if(root == null){
return;
}
TreeNode curNode = root;
Queue<TreeNode> processed = new LinkedList<TreeNode>();
Stack<TreeNode> process = new Stack<TreeNode>();
process.push(root);
processed.offer(root);
while(!process.isEmpty() || curNode != null){
if(curNode != null){
process.push(curNode);
processed.offer(curNode);
curNode = curNode.left;
}else{
curNode = process.pop();
curNode = curNode.right;
}
}
Iterator it = processed.iterator();
TreeNode lastNode = root;
if(it.hasNext()){
lastNode = (TreeNode) it.next();
}
while(it.hasNext()){
TreeNode cur = (TreeNode) it.next();
lastNode.right = cur;
lastNode.left = null;
lastNode = cur;
}
lastNode.right = null;
lastNode.left = null;
}
}
没有评论:
发表评论