找出BST上任意节点的下一个节点

来源:互联网 发布:利拉德数据 编辑:程序博客网 时间:2024/05/03 05:04

思路:

CC150的解法是有用到parent指针。

就是看看有没有右孩子,如果有,则好办,直接找右子树的最小值。

如果没有则,往上(parent)找,直到找到某个parent比当前值大!

package Tree_Graph; import CtCILibrary.TreeNode; public class S4_6 {     // 有parent指针的情况,分有右孩子和没有右孩子两种情况    public static TreeNode inorderSucc(TreeNode node) {        if(node == null) {            return null;        }                 if(node.right != null) {        // 有右孩子            return leftMostChild(node.right);        } else {                            // 没有右孩子            TreeNode cur = node;            TreeNode parent = node.parent;//          while (parent!=null && parent.left!=cur) {            while (parent!=null && node.data > parent.data) {                cur = parent;                parent = parent.parent;            }            return parent;        }    }         // 找一个树的最小节点    public static TreeNode leftMostChild(TreeNode root) {        if(root == null) {            return null;        }        while (root.left != null) {            root = root.left;        }        return root;    }         public static void main(String[] args) {        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};        TreeNode root = TreeNode.createMinimalBST(array);        for (int i = 0; i < array.length; i++) {            TreeNode node = root.find(array[i]);            TreeNode next = inorderSucc(node);            if (next != null) {                System.out.println(node.data + "->" + next.data);            } else {                System.out.println(node.data + "->" + null);            }        }    }}


0 0
原创粉丝点击