面試題63:二叉搜尋樹的第K個節點
阿新 • • 發佈:2019-01-23
題目:給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; class Solution { public: TreeNode* KthNode(TreeNode* pRoot, unsigned int k) { if(pRoot == NULL) return NULL; TreeNode* ObjNode = NULL; KthNode(pRoot, &ObjNode, k); return ObjNode; } void KthNode(TreeNode* pRoot, TreeNode** ObjNode, unsigned int &k) { if(pRoot->left != NULL) KthNode(pRoot->left, ObjNode, k); if(*ObjNode == NULL) { if(k == 1) { *ObjNode = pRoot; } k--; } if(*ObjNode == NULL && pRoot->right != NULL) KthNode(pRoot->right, ObjNode, k); } };