1. 中序遍历的序列是递增排序的序列
public LinkedList<Integer> inorder(TreeNode root, LinkedList<Integer> arr) {
if (root == null) return arr;
inorder(root.left, arr);
arr.add(root.val);
inorder(root.right, arr);
return arr;
}
2. Successor 代表的是中序遍历序列的下一个节点。即比当前节点大的最小节点,简称后继节点。 先取当前节点的右节点,然后一直取该节点的左节点,直到左节点为空,则最后指向的节点为后继节点。
public int successor(TreeNode root) {
root = root.right;
while (root.left != null) root = root.left;
return root;
}
3. Predecessor 代表的是中序遍历序列的前一个节点。即比当前节点小的最大节点,简称前驱节点。先取当前节点的左节点,然后取该节点的右节点,直到右节点为空,则最后指向的节点为前驱节点。
public int predecessor(TreeNode root) {
root = root.left;
while (root.right != null) root = root.right;
return root;
}