110.平衡二叉树
思路:
这道题求的是高度,所以使用后序遍历,将左右节点的信息返回给根节点。如果是空节点则返回true,如果左右节点的高度相差大于1则返回false。
看视频后:
我发现我把“如果左右节点的高度相差大于1则返回false”当成了根节点需要做的事,它应该是终止条件。
if(leftHeight-rightHeight>1 || leftHeight-rightHeight<-1)
return false;
终止条件:空节点,高度差
中:返回左&&右
257. 二叉树的所有路径
思路:
使用前序遍历,但不知道怎么回溯,很混乱
看视频后:
单独构造函数,需要节点,int数组,string数组
终止条件:
if(cur->left==NULL&&cur->right==NULL)
中:path.push_back(cur->val);
左右:
if(cur->left\right)
{// 左 traversal(cur->left\right,path,result);path.pop_back();// 回溯}
注意:因为要把最后的叶子节点push进去,所以中要在终止条件之前
终止时:需要把int转化成string
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;
404.左叶子之和
思路:
单独写一个计算sum的函数,void类型参数是root.使用前序遍历。
边界条件:
root==NULL
中:
if(root->left&&!root->left->left&&!root->left->right)
result+=root->left->val;
再左右遍历。
看视频后:
边界条件:
root==NULL
!root->left && !root->right
左:左遍历+leftvalue赋值
右:右遍历
中:sum=左value加右value