注意要传previous node,而java中不能传reference
法一:prev为static variable 法二:用个array wrap它...
1. Preorder flatten(Leetcode):
public class Solution {
TreeNode prev = null;
public void flatten(TreeNode root) {
if (root == null) {
return;
}
TreeNode rightnode = root.right;
if (prev != null) {
prev.left = null;
prev.right = root;
}
prev = root;
flatten(root.left);
// prev = root.left;
flatten(rightnode);
}
}
public class Solution {
public void flatten(TreeNode root) {
// use recursion
if(root == null) return;
TreeNode left = root.left;
TreeNode right = root.right;
flatten(root.left);
flatten(root.right);
root.right = left;
root.left = null;
TreeNode temp = root;
while(temp.right!=null){
temp = temp.right;
}
temp.right = right;
}
}
2. populating each node to its successor in BST
public void addSuccessor(Node node, Node[] prev) {
if (node == null)
return;
addSuccessor(node.left, prev);
if (prev[0] != null)
prev[0].next = node;
prev[0] = node;
addSuccessor(node.right, prev);
}
3. find the xth node in BST
public TreeNode getNthNode(TreeNode node, IntWrapper i, int x) {
if (node == null)
return null;
TreeNode foundAtLeft = getNthNode(node.left, i, x);
i.val++;
if (i.val == x)
return node;
if (foundAtLeft != null)
return foundAtLeft;
return getNthNode(node.right, i, x);
}