110.平衡二叉树 (优先掌握递归)
代码
int getHeight(TreeNode* node)
{
if(node==NULL)
{
return 0;
}
int leftHeight = getHeight(node->left);
if(leftHeight == -1) return -1;
int rightHeight=getHeight(node->right);
if(rightHeight==-1) return -1;
return abs(leftHeight - rightHeight) > 1? -1:1+max(leftHeight,rightHeight);
}
bool isBalanced(TreeNode* root) {
return getHeight(root) == -1?false:true;
}
257. 二叉树的所有路径 (优先掌握递归)
代码
void traversal(TreeNode* cur,vector<int>& path,vector<string>& result)
{
path.push_back(cur->val);
if(cur->left == NULL&& cur->right == NULL)
{
string sPath;
for(cur->left==NULL&&cur->right==NULL)
{
string sPath;
for(int i=0;i<path.size()-1;i++)
{
sPath += to_string(path[i]);
sPath += "->";
}
sPath +=to_string(path[path.size()-1]);
result.push_back(sPath);
return;
}
if(cur->right)
{
traversal(cur->right,path,result);
path.pop_back();
}
if(cur->right)
traversal(cur->right,path,result);
path.pop_back();
}
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
vector<int> path;
id(root==NULL)return result;
traversal(root,path,result);
return result;
}
};
404.左叶子之和 (优先掌握递归)
代码
int sumOfLeftLeaves(TreeNode* root) {
if(root==NULL) return 0;
if(root->left==NULL&& root->right == NULL) return 0;
int leftValue = sumOfLeftLeaves(root->left);
if(root->left && !root->left->left&& !root->left->right)
{
leftValue = root->left->val;
}
int rightValue = sumOfLeftLeaves(root->right);
int sum = leftValue + rightValue;
return sum;
}
222.完全二叉树的节点个数(优先掌握递归)
代码
private:
int getNodesNum(TreeNode* cur)
{
if(cur==NULL) return 0;
int leftNum = getNodesNum(cur->left);
int rightNum = getNodesNum(cur->right);
int treeNum = leftNum + rightNum +1;
return treeNum;
}
public:
int countNodes(TreeNode* root) {
return getNodesNum(root);
}