二叉搜索树的第k个节点-Java实现

二叉搜索树的第k个结点

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

一. 思路

二叉搜索树的中序遍历就是一个增序排列。因此以中序遍历的思路,先找左子树最小,再找根,再找右子树,直到找到第k节点为止。非递归解法采用一个栈,一个计数器来解决

二. 非递归解法

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        if (pRoot == null || k <= 0) {
            return null;
        }

        Stack<TreeNode> stack = new Stack<>();
        TreeNode curNode = pRoot;
        int count = 1;// 用作判断当前是第几小节点

        //while循环里面采用中序遍历
        while (!stack.isEmpty() || curNode != null) {
            if (curNode != null) {
                stack.push(curNode);
                curNode = curNode.left;
            } else {
                curNode = stack.pop();
                if (count++ == k) {
                    return curNode;
                }
                curNode = curNode.right;
            }
        }

        return null;
    }


}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务