题解 | #二叉搜索树的第k个结点#

二叉搜索树的第k个结点

http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
//给一颗二叉搜索树,找出其中第k小的节点
//先排序,再找数。使用中序遍历即可排好序。
import java.util.*;

public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k) {
        //先判断输入条件
        if(pRoot == null || k<=0){
            return null;
        }
        
        //使用栈进行中序遍历
        Stack<TreeNode> stack = new Stack<>();
        //定义一个指针,指向当前节点
        TreeNode cur = pRoot;
        //开始中序遍历
        while(!stack.isEmpty() || cur != null){
            if(cur!= null){
                //先把左边的都放入栈,后面还有其他处理
                stack.push(cur);
                cur = cur.left;
            }else{
                //左边都拿到了,就逐个开始判断有没有右孩子,有就加入遍历
                cur = stack.pop();
                if(--k == 0)
                    return cur;
                cur = cur.right;
            }
        }
        return null;
    }


}
全部评论

相关推荐

寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务