劍指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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章