※剑指offer系列51:二叉搜索树的第k个结点

根据二叉搜索树的特点,它中序遍历的顺序就是从小到大的顺序。因此只要中序遍历找到第k个就可以。

 1 class Solution {
 2 public:
 3     TreeNode* KthNode(TreeNode* pRoot, int k)
 4     {
 5         if (pRoot == NULL||k==0)
 6             return NULL;
 7         return findKthNode(pRoot,k);
 8         
 9     }
10     TreeNode* findKthNode(TreeNode* pRoot, int &k)
11     {
12         TreeNode* target = NULL;
13         if (pRoot->left)//一直找到最左的结点
14             target=findKthNode(pRoot->left,k);
15         if (target == NULL)
16         {
17             if (k == 1)
18                 target = pRoot;
19             k--;
20         }
21 
22         if (target==NULL&&pRoot->right)//在左边没找到,就去右子树
23             target=findKthNode(pRoot->right, k);
24         return target;
25     }
26 
27 
28 };

 

posted @ 2019-07-29 19:50  妮妮熊  阅读(85)  评论(0编辑  收藏  举报