剑指offer 54. 二叉搜索树的第k个结点

  1. 题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。
  2. 思路:
    1. 在中序遍历的过程中,遍历到第k个节点,直接返回该节点
  3. 启发或者坑:
    1. 要明白二叉搜索树的基本概念
  4. 代码:
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        int num = 0;
        int index;
        TreeNode* target = NULL;
        TreeNode* KthNode(TreeNode* pRoot, int k)
        {
            //中序遍历到k就可以跳出来了hh ,先左孩子,然后自己,然后右孩子
            if (k <= 0)
                return NULL;
            index = k;
            traverse(pRoot);
            return target; 
        }
         
        void traverse(TreeNode* root) {
            if (!root)
                return;
            if (root->left) {
                traverse(root->left);
            }
            num++;
            if (num == index) {
                target = root;
                return;
            }
            if (root->right) {
                traverse(root->right);
            }
        } 
    };
发布了131 篇原创文章 · 获赞 5 · 访问量 7373

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104093760