先序遍历的一个变化。记录下上次的节点就行了。
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(); } } } }