注意要传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);
}

本文介绍了一种使用递归方法实现二叉树的前序展平算法,并提供了一个混合迭代与递归的方法。此外,还展示了如何在二叉搜索树中填充每个节点到其后继节点的引用及查找第X个节点。
832

被折叠的 条评论
为什么被折叠?



