JZ62 二叉搜索树的第k个节点

二叉搜索树的第k个结点

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

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

递归迭代都可以。递归21秒,迭代28秒。

先上递归

public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k){
        if(k<=0) return null;
        this.k=k;
        this.count=0;
        inorder(pRoot);
        return ans;
    }
    int k, count; TreeNode ans;
    void inorder(TreeNode root){
        if(root==null||ans!=null) return;
        inorder(root.left);
        count++;
        if(k==count) ans=root;
        inorder(root.right);
    }
}

再上迭代

import java.util.*;
public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k){
        if(k<=0) return null;
        TreeNode curr=pRoot;
        Deque<TreeNode> stack=new ArrayDeque<>();
        int count=0;
        while(!stack.isEmpty()||curr!=null){
            while(curr!=null){
                stack.push(curr);
                curr=curr.left;
            }
            curr=stack.pop(); count++;
            if(count==k) return curr;
            curr=curr.right;
        }
        return null;
    }
}
全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务