代码随想录第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容