传送门
nowcoder
leetcode
题目描述
给定一棵二叉搜索树,请找出其中的第 k 小的结点。
C++ 代码 - nowcoder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Solution { public: int KthNode(TreeNode* pRoot, int k) { if (pRoot == nullptr) return -1;
stack<TreeNode*> stk; while (!stk.empty() || pRoot != nullptr) { while (pRoot != nullptr) { stk.push(pRoot); pRoot = pRoot->left; } pRoot = stk.top(); stk.pop(); if (-- k == 0) return pRoot->val; pRoot = pRoot->right; }
return -1; } };
|
C++ 代码 - leetcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution { private: int res = 0; int rank = 0;
public: int findTargetNode(TreeNode* root, int k) { traverse(root, k); return res; }
void traverse(TreeNode* root, int k) { if (root == nullptr) { return; } traverse(root->right, k);
rank ++; if (k == rank) { res = root->val; return; } traverse(root->left, k); } };
|