JZ62. 二叉搜索数的第k个节点

题目描述:给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。

1. 分析

二叉搜索树的特点:左子树小于根节点,右子树大于根节点。中序遍历即可。

思路:先递归调用左子树,看调用k次是否为空,若不为空,则此时访问的节点就是目标节点,否则递归调用右子树,直到调用k次,若此节点不为空,则此节点即为目标节点,否则就是没有目标节点,返回空指针。

2. 用C++写出逻辑:

class Solution {
    int count = 0;
public:
    TreeNode* KthNode(TreeNode* pRoot, int k) {
        if(pRoot == nullptr)
            return nullptr;
        TreeNode* node = KthNode(pRoot -> left, k);
        if(node)  return node;
        if(++count == k)  return pRoot;
        node = KthNode(pRoot -> right, k);
        if(node)  return node;
        return nullptr;
    }    
};
上一篇:二叉搜索树的第 k 个结点


下一篇:玩转手机中的linux系统termux并搭建java开发环境