采用preorder结构。根节点首先输出,下一个节点为左子节点,左子节点的末端链接根节点的右子节点。
2014 update:
public class Solution {
public void flatten(TreeNode root) {
TreeNode fake = new TreeNode(0);
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode pre = fake;
TreeNode cur = root;
while (cur != null || !s.isEmpty()) {
if (cur != null) {
if (cur.right != null) {
s.push(cur.right);
}
pre.right = cur;
pre.left = null;
pre = pre.right;
cur = cur.left;
} else {
cur = s.pop();
}
}
}
}
2013:
/ Flatten Binary Tree to Linked List
class Solution {
//循环
public voidflatten(TreeNode root) {
if (root == null) {
return;
}
Stack s = new Stack();
TreeNode prev = root;
TreeNode cur;
if (root.left != null ) {
cur =root.left;
if(root.right != null) {
s.push(root.right);
}
} else if (root.right != null) {
cur =root.right;
} else {
return;
}
while (cur != null || !s.isEmpty()) {
if (cur !=null) {
prev.right = cur;
prev.left = null;
if (cur.right != null){
s.push(cur.right);
}
prev = cur;
cur = cur.left;
} else{
cur = s.pop();
}
}
}
};
/
/ Flatten Binary Tree to Linked List
class Solution {
//递归
public voidflatten(TreeNode root) {
helper(root);
}
// return righttail
TreeNode helper(TreeNoderoot) {
if (root == null) {
returnnull;
}
TreeNode leftTail = helper(root.left);
TreeNode rightTail = helper(root.right);
if (leftTail != null) {
leftTail.right = root.right;
}
if (root.left != null) {
root.right= root.left;
root.left= null;
}
if (rightTail != null ) {
returnrightTail;
}
if (leftTail != null) {
returnleftTail;
}
return root;
}
}