1.20日学习总结
作者:互联网
今天我又来做题解了。今天想说的是一个 通过程序判断二叉树深度的问题。 具体题目如下。
我当初做这个题的方法。 是直接用结构体建了一个二叉树 。在用前序遍历的方式来找到深度。
用了一个max函数。 还用了一个deep变量来记录一下现在的深度。 max函数就是为了取出每次的最大值 这样将整个函数遍历完的话就可以找到深度了。
具体代码如下,
#include<stdio.h>
#include <algorithm>
using namespace std;
struct node {
int left, right;
};
node tree[10000000];
int n, ans;
void dfs(int d, int deep) {
if (d == 0) return ;
ans = max(ans, deep);
dfs(tree[d].left, deep+1);
dfs(tree[d].right, deep+1);//利用前序遍历
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&tree[i].left,&tree[i].right);//以结构体来表示一个树林.
}
dfs(1, 1);
printf("%d",ans);
return 0;
}
当然我这个代码有一点点小逻辑问题。 就是这个代码没法找到根节点。 也就是说我们第一个输入的必须要是根节点才行。 这个问题我在做另外一个题目的时候解决了。 但是当时我读这个题目的时候,并没有仔细研究。 当时做另外一个题目的时候,就解决了这个问题。具体来说呢?就是多建了一个数据域来存储。他们的根节点 就相当于每个子树。 存储了他们的上一个节点。 也就是相对于他们的根节点。 这样的话,整颗树中只有根节点,没有自己的祖宗。 就可以找到结构体中的根节点。
既然都说到这里了,就把那一题的题解。也做了吧。题目如下。
而这个题的解决方法就上述我也说了一点。唯一还要补充的就是这里的元素多是字符, 或者说都是字母。 然后我就利用强制转化的方式。把他们转化成了int 型 以此就可以利用下结构体的下标,
然后存储件数的方式。 就是我所说的建造三个数据域, 分别存储他的祖宗。和左右节点。 然后再进行遍历。然后总体的思路就是这样的。 代码如下,
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct node{
char left,right,ss;
};
node tree[1000];
void dfs(char s)
{
printf("%c", s);
if (tree[s].left!='*') dfs(tree[s].left);
if (tree[s].right!='*') dfs(tree[s].right);
}
int main()
{
int i,n;
char c,f1;
char d[10000];
cin>>n;
for (i=1;i<=n;i++){
cin>>c;
d[i]=c;
cin>>tree[c].left>>tree[c].right;
tree[tree[c].left].ss = tree[tree[c].right].ss = c;
}for(i=1;i<=n;i++){
if(tree[d[i]].ss==0){
f1=d[i];
}
}
dfs (f1);
return 0;
}
今天的总结就到这里了 。我也会把这几天的题解全部都做出来的。 我会尽我所能的,做的比较详细。 也是二次理解这些题目。
标签:总结,right,int,tree,dfs,学习,1.20,节点,left 来源: https://blog.csdn.net/qq_63889673/article/details/122608965