二叉搜索树的第k个结点

二叉搜索树的第k个结点

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

import java.util.ArrayList;
// {8,6,10,5,7,9,11},8
// null,5
public class Solution {
    ArrayList<TreeNode> list = new ArrayList<>(); // (1)

    TreeNode KthNode(TreeNode pRoot, int k)
    {
        addNode(pRoot);

        if(k>=1 && list.size()>=k) {
            return list.get(k-1);
        }

        return null;

    }

    // 中序遍历
    void addNode(TreeNode cur) {   // (2)
        if(cur != null) {
            addNode(cur.left);
            list.add(cur);
            addNode(cur.right);
        }
    }
}
全部评论
求问大佬,如果使用数组或者集合去遍历存储节点的话,还属于是O(1)的空间复杂度吗?
1 回复 分享
发布于 2021-10-03 15:35
贼清楚写的!
点赞 回复 分享
发布于 2020-02-06 21:06
萌新问一下,为什么选择中序遍历
点赞 回复 分享
发布于 2020-06-09 19:20
中序遍历递归写法还得把遍历的节点放入数组明显麻烦,非递归可以直接过程中判断是否到第k个数了。 import java.util.LinkedList; public class Solution { TreeNode KthNode(TreeNode pRoot, int k){ LinkedList<treenode> nodeStack = new LinkedList<treenode>(); TreeNode current = pRoot; int count = 0; while (current != null || !nodeStack.isEmpty()) { while (current != null) { nodeStack.addFirst(current); current = current.left; } if (!nodeStack.isEmpty()) { current = nodeStack.removeFirst(); count ++; if (count == k) { return current; } current = current.right; } } return null; } }</treenode></treenode>
点赞 回复 分享
发布于 2020-06-29 18:03
一定优化后的中序遍历递归写法,在in_order(root.right, stack);前加一个if(K>0)判断剪枝,这样中序遍历就不用遍历完整棵树了 import java.util.Stack; public class Solution { int K; TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot==null||k<=0) return null; K=k; Stack<treenode> stack=new Stack<>(); in_order(pRoot, stack); //K还大于0,说明k>节点个数,所以返回null,而不是栈顶结点(最大结点) if(K>0) return null; else return stack.pop(); } void in_order(TreeNode root, Stack<treenode> stack){ //System.out.println("执行1次"); if(root==null) return; //第一个if尽量减少入栈次数,第二个if尽量减少递归次数 in_order(root.left, stack); if(K>0) {stack.push(root); K--;} if(K>0) in_order(root.right, stack); } }</treenode></treenode>
点赞 回复 分享
发布于 2020-08-29 16:14

相关推荐

评论
28
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务