/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: int cnt = 0; TreeNode* res = nullptr; void mid_traverse(TreeNode* proot, int k) { if (proot == nullptr || cnt > k || k == 0) return; mid_traverse(proot->left, k); cnt++; if (cnt == k) res = proot; mid_traverse(proot->right, k); } int KthNode(TreeNode* proot, int k) { mid_traverse(proot, k); if (res) return res->val; return -1; } };
class Solution { public: vector<int> res; // 借助数组下标 int KthNode(TreeNode* pRoot, int k) { if (pRoot == nullptr || k == 0) return -1; KthNode(pRoot->left, k); res.push_back(pRoot->val); KthNode(pRoot->right, k); return k > res.size() ? -1 : res[k-1]; } };