剑指Offer学习-面试题54:二叉搜索树的第k大节点

	/**
     * 二叉搜索树的第k大节点
     *
     * @param root
     * @return
     */
    public TreeNode kthNode(TreeNode root, int k) {
        int count = 0;
        TreeNode cur = root;
        while (cur != null) {
            TreeNode mostRight = cur.left;
            if (null != mostRight) {
                //如果有左孩子,mostRight指向左孩子最右的节点
                while (mostRight.right != null && mostRight.right != cur) {
                    mostRight = mostRight.right;
                }
                if (mostRight.right == null) {
                    //mostRight不等于cur,mostRight右孩子设置为cur,cur左移
                    mostRight.right = cur;
                    cur = cur.left;
                    continue;
                } else {
                    //mostRight等于cur,mostRight右孩子设置为null
                    mostRight.right = null;
                }
            }
            count++;
            if (count == k) return cur;
            //如果没有左孩子,当前节点右移
            cur = cur.right;
        }
        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章