美文网首页
2019-12-12二叉搜索树的第k个结点

2019-12-12二叉搜索树的第k个结点

作者: wingle_smile | 来源:发表于2020-03-04 22:44 被阅读0次

    题目描述

    给定一颗二叉搜索树,请找出其中的第k大的结点。

    思路

    1.中序遍历二叉搜索树
    2.递归调用

    代码1

    Common.TreeNode KthNodeII(Common.TreeNode pRoot, int k) {
            if (pRoot == null || k < 0)
                return null;
            Stack<Common.TreeNode> stack = new Stack<>();
            Common.TreeNode node = pRoot;
            int count = 0;
            while (node != null || !stack.isEmpty()) {
                while (node!= null) {
                    stack.push(node);
                    node = node.left;
                }//左子树为空或已经被访问
                if (!stack.isEmpty()) {
                    node=stack.pop();//访问根节点
                    count++;
                    if (count == k)
                        return node;
                    node = node.right;//处理右子树
                }
            }
            return null;
        }
    

    代码2

    Common.TreeNode KthNode(Common.TreeNode pRoot, int k) {
            if (pRoot == null || k < 0)
                return null;
            Common.TreeNode res;
            if ((res = KthNode(pRoot.left, k)) != null)//左子树找到,则返回
                return res;
            count++;//访问过左子树,count+1
            if (k == count)//如果相等,说明当前节点就是要找的第k个节点
                return pRoot;
            res = KthNode(pRoot.right, k);//如果还没找到,查找右子树
            if (res != null)
                return res;
            return null;
        }
    

    相关文章

      网友评论

          本文标题:2019-12-12二叉搜索树的第k个结点

          本文链接:https://www.haomeiwen.com/subject/rkjtnctx.html