南宁网站建设推广服务,网站建设托管合同,音乐播放网站开发pc端,微盟商户助手官网二叉树实操小练习~这里对二叉树的遍历要有一定的理解#xff0c;如果还不熟悉的小伙伴可以看看我的这篇博客#xff1a;数据结构——二叉树#xff08;先序、中序、后序及层次四种遍历#xff08;C语言版#xff09;#xff09;超详细~ (✧∇✧) Q_Q-CSDN博客 牛客.KY11二…二叉树实操小练习~这里对二叉树的遍历要有一定的理解如果还不熟悉的小伙伴可以看看我的这篇博客数据结构——二叉树先序、中序、后序及层次四种遍历C语言版超详细~ (✧∇✧) Q_Q-CSDN博客 牛客.KY11二叉树遍历
题目描述这里要求写出全过程 思路这里我们用到两个函数CreateTree和InOrderCreateTree将输入的字符串转化为二叉树的前序遍历InOrder用于对已经创建好的二叉树进行后续遍历并输出。具体实现看如下代码
#includestdio.h//二叉树的声明与定义
typedef struct TreeNode
{struct TreeNode* left;struct TreeNode* right;char val;
}TNode;//用于将输入的字符进行前序遍历
TNode* CreateTree(char* a,int* pi)
{if(a[*pi]#)//这里通过传进来的i来实现对数组a的元素挪动{(*pi);return NULL;}//为开辟一个二叉树而创建的指针变量TNode* root(TNode*)malloc(sizeof(TNode));if(rootNULL){printf(malloc fail\n);exit(-1);}
//将不是#的字符赋予此时所对应的二叉树的val,进行前序遍历root-vala[*pi];(*pi);root-left CreateTree(a,pi);root-right CreateTree(a,pi);return root;//返回开辟好的根节点
}//对二叉树进行中序遍历并输出完成题目的任务
void InOrder(TNode* root)
{if(rootNULL)return;InOrder(root-left);printf(%c ,root-val);InOrder(root-right);
}//上述函数都在主函数中实现
int main()
{char str[100];scanf(%s,str);int i0;TNode* rootCreateTree(str,i);InOrder(root);return 0;
}LeetCode104.二叉树的最大深度
题目描述 题目所给的二叉树的定义 基本思路如果树为空则深度为0如果树不为空则树的深度等于左子树右子树中的最大深度1.主要难点在于函数的递归代码解释 int maxDepth(struct TreeNode* root)
{if(rootNULL)return 0;
//遍历左右子树直到为空返回左子树右子树中较大的后1算上自身int leftmaxDepthmaxDepth(root-left);int rightmaxDepthmaxDepth(root-right);return leftmaxDepthrightmaxDepth?leftmaxDepth1:rightmaxDepth1;
} 函数递归展开图如图中的数为例红色为递推部分蓝色为回溯部分 LeetCode110.平衡二叉树
题目描述 题目所定义的二叉树 思路整体的左右子树的深度小于等于1部分的左子树的左右子树的深度小于等于1部分的右子树的左右子树的深度小于等于1 代码解释 int maxDepth(struct TreeNode* root){if(rootNULL)return 0;int leftmaxDepthmaxDepth(root-left);int rightmaxDepthmaxDepth(root-right);return leftmaxDepthrightmaxDepth?leftmaxDepth1:rightmaxDepth1;}
bool isBalanced(struct TreeNode* root)
{if(rootNULL)return true;//记录左右子树的最大深度int leftmaxDepthmaxDepth(root-left);int rightmaxDepthmaxDepth(root-right);return abs(leftmaxDepth-rightmaxDepth)2//分别满足这三个条件才能满足平衡二叉树isBalanced(root-left)isBalanced(root-right);
}
博客到这里也是结束了喜欢的小伙伴可以点赞加关注支持下博主这对我真的很重要~~