※剑指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 };