- 题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
- 思路:
- 在中序遍历的过程中,遍历到第k个节点,直接返回该节点
- 启发或者坑:
- 要明白二叉搜索树的基本概念
- 代码:
/* 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); } } };
剑指offer 54. 二叉搜索树的第k个结点
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/104093760
今日推荐
周排行