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

购物网网站建设有网站吗给一个

购物网网站建设,有网站吗给一个,lnmp搬家wordpress,广西华宇建设集团网站上回我们手撕了一棵二叉树,并且通过递归完成了遍历,这回我们将深入理解用递归解决相关的二叉树问题,数量使用分治的思想. 上回的代码: #include<stdio.h> #include<stdlib.h> typedef struct BinTreeNode {struct BinTreeNode* left;struct BinTreeNode* right;i…

上回我们手撕了一棵二叉树,并且通过递归完成了遍历,这回我们将深入理解用递归解决相关的二叉树问题,数量使用分治的思想.

上回的代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct BinTreeNode
{struct BinTreeNode* left;struct BinTreeNode* right;int val;
}BTNode;
BTNode* BuyBTNode(int val)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));if (newnode == NULL){perror("malloc fail");return NULL;}newnode->val = val;newnode->left = NULL;newnode->right = NULL;return newnode;
}
BTNode* CreateTree()
{BTNode* n1 = BuyBTNode(1);BTNode* n2 = BuyBTNode(2);BTNode* n3 = BuyBTNode(3);BTNode* n4 = BuyBTNode(4);BTNode* n5 = BuyBTNode(5);BTNode* n6 = BuyBTNode(6);n1->left = n2;n1->right = n4;n2->left = n3;n4->left = n5;n4->right = n6;return n1;
}
void PreOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}printf("%d ", root->val);PreOrder(root->left);PreOrder(root->right);
}void InOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}InOrder(root->left);printf("%d ", root->val);InOrder(root->right);
}
void PostOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}PostOrder(root->left);PostOrder(root->right);printf("%d ", root->val);
}int main()
{BTNode* root = CreateTree();printf("前序遍历:");PreOrder(root);printf("\n");printf("中序遍历:");InOrder(root);printf("\n");printf("后序遍历:");PostOrder(root);printf("\n");return 0;
}

一、求二叉树存储的元素个数

这里我的思路很简单,我们可以通过递归将二叉树向左右孩子遍历,不为空则加1.

代码如下:

int TreeSize(BTNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}

二、二叉树的最大深度

这个思路整体也不难,我们一样用递归左右孩子节点,每通过一个非0的节点加1,NULL则直接返回,然后左右节点的返回值比较,最后返回大的值。

代码如下:

int maxDepth(BTNode* root)
{if (root == NULL)return 0;int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}

三、寻找X的所在的节点

这个就是在左右递归上加上判断val是否等于X

代码示例:

BTNode* TreeFind(BTNode* root, int x)
{if (root == NULL)return NULL;if (root->val == x)return root;BTNode* ret1 = TreeFind(root->left, x);if (ret1)return ret1;BTNode* ret2 = TreeFind(root->right, x);if (ret2)return ret2;return NULL;
}

四、单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

bool isUnivalTree(struct TreeNode* root) {if(root==NULL)return true;if (root->left) {if (root->val != root->left->val || !isUnivalTree(root->left)) {return false;}}if (root->right) {if (root->val != root->right->val || !isUnivalTree(root->right)) {return false;}}return true;
}

运用递归判断只要存在一个false最后结果必然false

五、相同的树

100. 相同的树 - 力扣(LeetCode)

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if(p == NULL && q == NULL)return true;if(p == NULL || q == NULL)return false;if(p->val != q->val)return false;return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}

这题思路和上题差不多,排除特殊情况就行。

六、对称二叉树

101. 对称二叉树 - 力扣(LeetCode)

bool judge(struct TreeNode *p ,struct TreeNode *q){if(p == NULL && q == NULL){return true;}else if(p == NULL || q == NULL){return false;}else if(p -> val != q -> val){return false;}return judge(p -> left,q -> right) && judge(p -> right,q -> left);
}
bool isSymmetric(struct TreeNode* root){return judge(root -> left,root -> right);
}

这题思路和上题也大差不差,我把递归内容拉出来了而已


希望这篇学习之后,大家能学会这种分治的思想,谢谢阅读。

http://www.yayakq.cn/news/398700/

相关文章:

  • 站长之家seo查询海门住房和城乡建设局网站
  • 网店如何引流与推广搜索引擎优化工作主要做好哪些方面
  • 网站页面设计的特色24小时通过网站备案
  • 互联网站安全管理服务平台乌兰察布网站建设
  • 网站建设进度报告用手机开发软件的工具
  • 沧州英文模板建站精品网站开发
  • 如何制作自己公司网站免费自助建站怎么样
  • 广州 创意的网站设计网站百科推广怎么做
  • 深圳观澜网站建设动画制作视频
  • 邯郸网站设计注册青岛网上注册公司官网
  • 做网站付钱方式网站推广哪个好
  • 展示型网站一样做seo优化怎么做网络棋牌网站
  • 北京网站开发公司大全在家接做网站
  • 众筹网站怎么做推广青岛品牌设计公司
  • seo整站优化网站建设西安代做毕业设计网站
  • 苏州市建设工程建设中心网站杭州做网站好的公司
  • 杭州免费建站有代码怎么做网站
  • 服装网站建设规划书怎么写海外网网址
  • 移动端网站开发流程全国新增确诊病例
  • 在线做效果图的网站最新网页版传奇
  • 免费空间做自己的网站网址注册了怎么做网站
  • 揭阳市网站开发python做网站的多吗
  • 企业建设网站的目标凡科做的网站打不开
  • asp做的网站怎么发布项目前期工作6个步骤
  • 公众号制作模板网站佛山木工机械厂骏域网站建设专家
  • 怎么做网站呢磐安住房和城乡建设部网站
  • 企业网站建设需求文档做网站公司凡科
  • 青岛知名网站建设南昌做网站建设公司
  • 襄阳网站seo方法西安做网站找缑阳建
  • 30天网站建设实录视频云盘搜索李晓峰