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

桂林漓江阳朔抖音seo代理

桂林漓江阳朔,抖音seo代理,网站怎么做长尾词,无锡建设招标网站树的特点 最小连通图 无环 有且只有 n − 1 n-1 n−1 条边 树的建立方式 顺序存储 只适用于满n叉树&#xff0c;完全n叉树 1<<n 表示结点 2 n 2^n 2nP4715 【深基16.例1】淘汰赛 void solve() {cin >> n;for (int i 0; i<(1<<n); i) {cin >&g…

树的特点

  • 最小连通图

  • 无环

  • 有且只有 n − 1 n-1 n1 条边

树的建立方式

顺序存储

  • 只适用于满n叉树,完全n叉树

  • 1<<n 表示结点 2 n 2^n 2n
  • P4715 【深基16.例1】淘汰赛
void solve() {cin >> n;for (int i = 0; i<(1<<n); i++) {cin >> value[i + (1 << n)];}

结构体数组

typedef struct node {int w,l,r,f;
};
vector<node>nodes(109, node());

链式存储

比结构体数组存储更加灵活,不依赖结点编号,且给定输入,父子关系明确。

leetcode的给定输入格式

  • 使用结构体存储结点信息,使用指针的形式存储父母和孩子的信息
 * struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

图的存储方式

树作为一种特殊的图,完全可以沿用图的存储方式










以下均为例题

遍历树的应用

    bool dfs(TreeNode*left,TreeNode*right){if(!left&&right)return false;if(left&&!right)return false;if(!left&&!right)return true;return left->val==right->val&&dfs(left->left,right->right)&&dfs(left->right,right->left);}bool isSymmetric(TreeNode* root) {if(!root)return true;return dfs(root->left,root->right);}
  • 104.二叉树的最大深度:后序遍历。
    int dfs(TreeNode* root){if(!root)return 0;return max(dfs(root->left),dfs(root->right))+1;}int maxDepth(TreeNode* root) {return dfs(root);   }
  • 111.二叉树的最小深度:后序遍历,但是只有叶子结点才算深度,所以遍历空结点会干扰最后答案,干脆不遍历空结点,空结点设置为INT_MAX终止条件也改为叶子结点。y
    int dfs(TreeNode*root){if(!root->left&&!root->right)return 1;int left=INT_MAX,right=INT_MAX;if(root->left)left=dfs(root->left);if(root->right)right=dfs(root->right);return min(left,right)+1;}int minDepth(TreeNode* root) {if(!root)return 0;return dfs(root);}

222.完全二叉树的节点个数:后序遍历或者BFS。

    int dfs(TreeNode*root){if(!root)return 0;return dfs(root->left)+dfs(root->right)+1;}int countNodes(TreeNode* root) {return dfs(root);}
  • 110. 平衡二叉树:本质是比较高度。可以用pair<int,int>分别表示子树的高度和子树是否满足平衡二叉树,也可以用特殊值-1处理。
    int dfs(TreeNode* root){if(!root)return 0;int left=dfs(root->left);int right=dfs(root->right);if(left==-1||right==-1)return -1;if(left-right>=2||right-left>=2){return -1;}return max(left,right)+1;}bool isBalanced(TreeNode* root) {if(dfs(root)!=-1)return true;return false;}
  • 257. 二叉树的所有路径:回溯,注意to_string函数的使用。还用了一点终止条件控制带条件的遍历
    vector<string>res;void dfs(TreeNode* root,string s){if(!root)return;if(!root->left&&!root->right){res.push_back(s);}if(root->left){string tmp(s);tmp+="->";tmp+=to_string(root->left->val);dfs(root->left,tmp);}      if(root->right){string tmp(s);tmp+="->";tmp+=to_string(root->right->val);dfs(root->right,tmp);}}vector<string> binaryTreePaths(TreeNode* root) {string s;s+=to_string(root->val);dfs(root,s);return res;}
  • 404.左叶子之和:使用后序遍历。特殊判断是否存在左叶子结点
    int dfs(TreeNode* root){if(!root)return 0;int value=0;if(root->left){if(!root->left->left&&!root->left->right){value+=root->left->val;}}return value+dfs(root->left)+dfs(root->right);}int sumOfLeftLeaves(TreeNode* root) {return dfs(root);}
  • 513.找树左下角的值:设置全局变量,然后dfs即可。
    int ans=0;int max_depth=0;void dfs(TreeNode* root,int depth){if(!root)return;if(!root->left&&!root->right){if(depth>max_depth){max_depth=depth;ans=root->val;}}dfs(root->left,depth+1);dfs(root->right,depth+1);}int findBottomLeftValue(TreeNode* root) {dfs(root,1);return ans;}
  • 112. 路径总和:后序遍历。
    bool dfs(TreeNode* root,int sum,int targetSum){if(!root->left&&!root->right){if(sum==targetSum){return true;}return false;}bool left=false,right=false;if(root->left)left=dfs(root->left,sum+root->left->val,targetSum);if(root->right)right=dfs(root->right,sum+root->right->val,targetSum);return left||right;}bool hasPathSum(TreeNode* root, int targetSum) {if(!root)return false;return dfs(root,root->val,targetSum);}
    TreeNode*dfs(vector<int>& inorder,vector<int>& postorder){if(inorder.size()==0)return nullptr;if(inorder.size()==1){TreeNode*node=new TreeNode(inorder[0]);return node;}int value=postorder[postorder.size()-1];TreeNode*root=new TreeNode(value);int idx=-1;for(int i=0;i<inorder.size();i++){if(inorder[i]==value){idx=i;break;}}vector<int>inorder_left(inorder.begin(),inorder.begin()+idx);vector<int>inorder_right(inorder.begin()+idx+1,inorder.end());vector<int>postorder_left(postorder.begin(),postorder.begin()+idx);vector<int>postorder_right(postorder.begin()+idx,postorder.end()-1);root->left=dfs(inorder_left,postorder_left);root->right=dfs(inorder_right,postorder_right);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {return dfs(inorder,postorder);}
http://www.dtcms.com/wzjs/359712.html

相关文章:

  • 最便宜网站建设seo推广哪家好
  • ui设计与制作培训网站建设排名优化
  • 深圳网站定制开发个人介绍网页制作
  • 快速建站全流程详细指导手册百度图片搜索
  • 企业网站建设的开放方式一般有十大培训机构教育培训机构哪家好
  • 哪个网站可以改字体广告优化师前景怎样
  • 网站简繁体转换.rar网店seo名词解释
  • 包头网站建设优化app营销模式有哪些
  • 团购网站怎么做推广网络服务平台
  • 做游戏任务赚钱的网站有哪些新品牌进入市场的推广方案
  • 做家装的网站百度6大核心部门
  • 微网站开发 php哪家网络公司比较好
  • 芜湖做网站公司网页seo优化
  • wordpress默认主题下载地址seoul是什么国家
  • javaweb购物网站开发百度双十一活动
  • 徐州网站建设价格南京seo推广公司
  • 有个网站可以接单做设计的seo培训一对一
  • 拖拽式建站wordpress深圳百度关键
  • 成都十大平面设计工作室宁波seo外包引流推广
  • 网站建设新方式简单省时抖音seo代理
  • html网站编辑器重庆排名seo公司
  • 学做网站论坛会员账号中国2022年重大新闻
  • web网站维护常见的网站推广方法有哪些
  • 桂林生活网官方网站搜索引擎营销的四种方式
  • 网站建设情况怎么写范文广东东莞疫情最新消息今天又封了
  • 安庆网站建设推荐安徽秒搜科技西安关键词排名软件
  • 深圳东风大厦 网站建设百度资源提交
  • php 网站 整合 数据库发稿推广
  • wordpress SEO Smart Linkseo诊断报告怎么写
  • 天天做网站怎么办网站平台