当前位置: 首页 > wzjs >正文

怎么做苹果手机网站神马推广登录

怎么做苹果手机网站,神马推广登录,新手做淘宝客网站教程,长沙医疗网站建设文章目录 1.给一个数组构建二叉树2.从前序遍历和中序遍历构建二叉树3.二叉树中的最大路径和 1.给一个数组构建二叉树 思路:就是借助一个队列实现层序遍历的思想。 先将root节点入队列,构造左右节点后,root取出来时,将其左右孩子都…

文章目录

  • 1.给一个数组构建二叉树
  • 2.从前序遍历和中序遍历构建二叉树
  • 3.二叉树中的最大路径和


1.给一个数组构建二叉树

思路:就是借助一个队列实现层序遍历的思想。
先将root节点入队列,构造左右节点后,root取出来时,将其左右孩子都入队列。

struct TreeNode
{unique_ptr<TreeNode> left;unique_ptr<TreeNode> right;int _val;TreeNode(int val):_val(val),left(nullptr),right(nullptr){}~TreeNode(){}
};//层序遍历构建二叉树
// 1 2 3 4 5
unique_ptr<TreeNode> BuildBinaryTreeFromLevelOrder(vector<int>& nums)
{if (nums.size() == 0){cout << "nums is empty!" << endl;}unique_ptr<TreeNode> root = make_unique<TreeNode>(nums[0]);queue<TreeNode*> q;q.push(root.get());int i = 1;while (!q.empty() && i < nums.size()){TreeNode* cur = q.front();q.pop();//先处理左子树cur->left = make_unique<TreeNode>(nums[i]);q.push(cur->left.get());i++;//再处理右子树if (i < nums.size()){cur->right = make_unique<TreeNode>(nums[i]);q.push(cur->right.get());}i++;}return root;
}

2.从前序遍历和中序遍历构建二叉树

从前序遍历和中序遍历构建二叉树

在这里插入图片描述

思路:

  • 1.根据前序遍历的根,先找到中序遍历的根节点所在下标。
  • 2.然后划分成两个区间进行递归即可。

注意事项:
previ是前序中的根节点下表,用来构建当前节点的。
所以构建完根节点后, 需要++previ,到达左子树的根节点。
并且要传引用。否则回到当前递归栈这一层时,会从原位置开始向下走

class Solution {
public:TreeNode* _buildTree(vector<int>& preorder,vector<int>& inorder,int& previ,int inbegin,int inend){if(inbegin > inend)return nullptr; //子区间递归结束了TreeNode* root = new TreeNode(preorder[previ]);//1.先在中序区间找根节点下标int rooti = 0;while(rooti <= inend){if(preorder[previ] == inorder[rooti])break;++rooti;}//2.分成左右子区间分别构建子树。++previ; //根节点的下一个节点就是左子树的根了root->left = _buildTree(preorder,inorder,previ,inbegin,rooti-1);//这里不要再++prei,因为递归构建左子树时,会自己++prei,构建左子树的最后//一个节点时,会先++prei,就到右子树了。root->right = _buildTree(preorder,inorder,previ,rooti+1,inend);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {//根据前序遍历的根,先找到中序遍历的根节点所在下标。//然后划分成两个区间进行递归即可。int previ = 0; //传参时一定是传引用,否则回到当前递归栈这一层时//会从原位置开始向下走int inbegin = 0,inend = inorder.size()-1;return _buildTree(preorder,inorder,previ,inbegin,inend);}
};

3.二叉树中的最大路径和

二叉树中的最大路径和
在这里插入图片描述

思路:二叉树中一条路的最大路径和一定是该节点的左子树的最大有效值与右子树的最大有效值的最大值的和,再加上当前节点的值。
所以:

  • 1.先求出左右子树的最大有效值,再加上当前节点的值。
  • 2.求有效值的过程,不断更新最大路径和。

这里注意两个概念:

  • 1.最大贡献值是因为左子树可能有几十条路径,需要选出最优的路径,才是最大的贡献。
    左右子树的最大贡献值加起来,再加上我当前节点的值之后,才组成最大路径和(左右都是最优的路径)。我的左子树和右子树两条路径选出来,比较后,选最大的,再加上我当前节点的值,然后向上交付,就能组成一条最优的路径。
  • 2.最大路径和就是:左右子树的最大贡献值,加上我当前节点的值,就组成了一条完整的路径。

别看这道题是困难题,如果想明白了后序遍历,就一点不难。

class Solution {int max_val = INT_MIN; //保存最大的路径和
public:int _paxPathSum(TreeNode* root){if(root == nullptr)return 0; //空节点的有效值为0//保存左右子树的最大贡献值int left_con = max(_paxPathSum(root->left),0);int right_con = max(_paxPathSum(root->right),0);//更新最大路径和max_val = max(max_val,left_con + right_con + root->val);//返回贡献值return root->val + max(left_con,right_con);}int maxPathSum(TreeNode* root) {_paxPathSum(root);return max_val;}
};
http://www.dtcms.com/wzjs/290971.html

相关文章:

  • 全网推广营销汕头seo服务
  • 网站只用css做tab切换优秀营销软文范例100字
  • 网站内部数据搜索怎么做seo建站技术
  • 网站制作三级页面b站推广app大全
  • 织梦手机网站模板网络推广和seo
  • 国际站wap端流量独立网站和平台网站
  • 中文域名是不是骗局seo排名教程
  • 有没有做家具特卖的网站广西壮族自治区
  • 阿里备案网站seo五大经验分享
  • 同城换物网站为什么做不起来关键字排名查询
  • 做装修网站多少钱济南seo排行榜
  • dw中做网站的步骤网站seo外包公司有哪些
  • 做企业网站需要准备什么材料网络公司排行榜
  • 网站建设-搜遇网络口碑营销的方法
  • 四川省城乡住房建设部网站可以免费网络推广网站
  • 广东在线网站建设谷歌在线搜索
  • 贵阳做网站电话网站制作平台
  • 企业设计网站系统互联网公司排名2021
  • 门户网站的类型单词优化和整站优化
  • 邢台wap网站建设价格西安网站建设公司排名
  • 图片交易网站源码网络营销的渠道
  • 免费学课程的软件西安seo优化
  • 淄博网络运营公司网站seo哪家做的好
  • 淄博做网站多少钱南宁seo关键词排名
  • 自己网站做反链青岛app开发公司
  • 网站建设需求分析模板汕头seo优化培训
  • 企业营销型网站案例seo优化排名推广
  • 怎样在谷歌做网站长沙网站搭建关键词排名
  • O2O网站制作需要多少钱网站广告策划
  • 西安网站建设 早晨百度指数属于行业趋势及人群