110.平衡二叉樹
文章連結:https://programmercarl.com/0110.平衡二叉樹.html#題外話
題目連結:https://leetcode.cn/problems/balanced-binary-tree/description/
class Solution {
public:
//每次都要比較左右子樹的高度差是否在1以內,所以遞迴是要統計子樹的高度的
int getHeight(TreeNode* root){
if(root==NULL) return 0;
//獲得左子樹的高度,如果左子樹高度為-1,說明已經失敗了
int leftHeight=getHeight(root->left);
if(leftHeight==-1) return -1;
//獲得右子樹的高度,如果右子樹高度為-1,說明已經失敗了
int rightHeight=getHeight(root->right);
if(rightHeight==-1) return -1;
//如果左右子樹的高度都不為-1,說明可以進行高度差的比較,判斷是否在1以內
if(abs(leftHeight-rightHeight)>1) return -1;
//如果以上失敗條件都能排除,則可以返回父節點的高度
return 1+max(leftHeight,rightHeight);
}
bool isBalanced(TreeNode* root) {
if(getHeight(root)==-1) return false;
return true;
}
};
257. 二叉樹的所有路徑
文章連結:https://programmercarl.com/0257.二叉樹的所有路徑.html
題目連結:https://leetcode.cn/problems/binary-tree-paths/description/
class Solution {
void traversal(TreeNode* node,string path,vector<string>&result){
//這裡一開始要加上葉子節點
path+=to_string(node->val);
//再處理葉子節點的情況
if(node->right==NULL&&node->left==NULL){
result.push_back(path);
return;
}
//左
if(node->left) traversal(node->left,path+"->",result);
//右
if(node->right) traversal(node->right,path+"->",result);
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
string path;
if(root==NULL) return {};
traversal(root,path,result);
return result;
}
};
404.左葉子之和
文章連結:https://programmercarl.com/0404.左葉子之和.html
題目連結:https://leetcode.cn/problems/sum-of-left-leaves/description/
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root==NULL) return 0;
int leftNum=0;
//不斷向下遍歷,直到遇到符合條件的(左孩子為葉子節點)左葉子節點和的值才會增加
if(root->left!=NULL&&root->left->left==NULL&&root->left->right==NULL){
leftNum+=root->left->val;
}
return leftNum+sumOfLeftLeaves(root->left)+sumOfLeftLeaves(root->right);
}
};
222.完全二叉樹的節點個數
文章連結:https://programmercarl.com/0222.完全二叉樹的節點個數.html
題目連結:https://leetcode.cn/problems/count-complete-tree-nodes/
總結:直接做一個遍歷即可
class Solution {
public:
int countNodes(TreeNode* root) {
if(root==NULL) return 0;
return 1+countNodes(root->left)+countNodes(root->right);
}
};