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

2020-03-04  本文已影响0人  wingle_smile

题目描述

给定一颗二叉搜索树,请找出其中的第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;
    }
上一篇下一篇

猜你喜欢

热点阅读