首页 > 解决方案 > 我可以cout但不返回为什么?请提出更改建议

问题描述

在此处输入图像描述我可以 coutA->val但无法返回A->val。为什么?因为我们只能进入 for 循环一次,它应该返回它。请解释这样返回的逻辑错误。还建议任何更改。感谢您的帮助。

/**

* Definition for a binary tree node.

* struct TreeNode {

*     int val;

*     TreeNode *left;

*     TreeNode *right;

*     TreeNode() : val(0), left(nullptr), right(nullptr) {}

*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
right(right) {}

* };

*/

class Solution {
 public:
  int kthSmallest(TreeNode* A, int B) {
    if (A == NULL)

    {
      return -1;
    }

    int res;

    int k = B;

    static int i = 0;

    if (A != NULL)

    {
      kthSmallest(A->left, B);

      i++;

      if (i == k)

      {
        int res = A->val;

        cout << A->val;

        return res;
      }

      kthSmallest(A->right, B);
    }

    return -111;
  }
};

标签: c++binary-search-tree

解决方案


像这样的东西怎么样,函数覆盖初始化num0?:

const TreeNode *kthSmallest(const TreeNode *A, const int k, int &num) {
    if (!A) return nullptr;

    const TreeNode *left = kthSmallest(A->left, k, num);
    if (left != nullptr) return left;

    num++;
    if (k == num) return A;

    return kthSmallest(A->right, k, num);
}

const TreeNode *kthSmallest(const TreeNode *A, const int k) {
    int num{};
    return kthSmallest(A, k, num);
}

推荐阅读