您好我想使用遞歸找到最左邊的二進制樹的行中的值。什麼更新爲無效遞歸函數
我嘗試做了這種方式:
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
int lmValue = root -> val;
int Maxdepth = 0;
Maxdepth = helper(root, 0, Maxdepth, lmValue);
cout << Maxdepth;
return lmValue;
}
private:
int helper(TreeNode* root, int depth, int Maxdepth, int lmValue) {
if (!root)
return depth;
int leftDepth = helper(root -> left, depth + 1, Maxdepth, lmValue);
int rightDepth = helper(root -> right, depth + 1, Maxdepth, lmValue);
int curDepth = max(leftDepth, rightDepth);
if (curDepth > Maxdepth) {
Maxdepth = curDepth;
lmValue = root -> val;
}
return Maxdepth;
}
};
深度可以,因爲我回來就馬上更新。但是,lmValue無法更新。所以答案是錯誤的。
我發現裏面做這樣的解決方案:
class Solution {
public:
void findBottomLeftValue(TreeNode* root, int& maxDepth, int& leftVal, int depth) {
if (root == NULL) {
return;
}
//Go to the left and right of each node
findBottomLeftValue(root->left, maxDepth, leftVal, depth+1);
findBottomLeftValue(root->right, maxDepth, leftVal, depth+1);
//Update leftVal and maxDepth
if (depth > maxDepth) {
maxDepth = depth;
leftVal = root->val;
}
}
//Entry function
int findBottomLeftValue(TreeNode* root) {
int maxDepth = 0;
//Initialize leftVal with root's value to cover the edge case with single node
int leftVal = root->val;
findBottomLeftValue(root, maxDepth, leftVal, 0);
return leftVal;
}
};
我失去了在這裏是該解決方案不返回任何東西,但每個變量獲得在每個遞歸級別更新。
這就是說,如果我什麼都不返回,我會返回一切?
作爲新手,請給我一些指示。
感謝!
不,你實際上沒有返回任何東西。你正在改變你的數據結構。你有使用可變數據結構的經驗嗎? –
對不起,我只是有一些C++的基礎知識,而且我知道可變數據結構的含義,但是我對此沒有經驗。但我不知道我爲什麼要改變我的數據結構,請給我一些想法?謝謝。 – kingswanwho
哦,我意識到第二個解決方案使用leftval和maxDepth的參考。但是我將自己的第一個解決方案從int lmValue更改爲int&lmValue,lmValue仍然沒有更新。 – kingswanwho