先序遍历的一个变化。记录下上次的节点就行了。
public class Solution {
public void flatten(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode n = root;
TreeNode last = null;
while (n != null || !stack.empty()) {
if (n != null) {
if (last != null) {
last.left = null;
last.right = n;
}
last = n;
if (n.right != null) {
stack.push(n.right);
}
n = n.left;
}
else {
n = stack.pop();
}
}
}
}