w9-2 求二叉树中节点间的宽度
Posted lijunjie03
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了w9-2 求二叉树中节点间的宽度相关的知识,希望对你有一定的参考价值。
如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:
深度:4 宽度:4(同一层最多结点个数)
结点间距离: ⑧→⑥为8 (3×2+2=8)
⑥→⑦为3 (1×2+1=3)
注:结点间距离的定义:由结点向根方向(上行方向)时的边数×2,
与由根向叶结点方向(下行方向)时的边数之和。
输入格式
输入文件第一行为一个整数n(1≤n≤100),表示二叉树结点个数。接下来的n-1行,表示从结点x到结点y(约定根结点为1),最后一行两个整数u、v,表示求从结点u到结点v的距离。
输出格式
三个数,每个数占一行,依次表示给定二叉树的深度、宽度及结点u到结点v间距离。
输入输出样例
10 1 2 1 3 2 4 2 5 3 6 3 7 5 8 5 9 6 10 8 6
4 4 8
#include <iostream> #define _for(i, a, b) for (int i=(a); i<=(b); i++) using namespace std; const int MAXN = 1e6 + 10; struct node int left, right; ; node tree[MAXN];//存储结构定义 int n, ans; void dfs(int id, int deep) if (id == 0) return ;//到达叶子节点时返回 ans = max(ans, deep);//更新答案 dfs(tree[id].left, deep+1);//向左遍历 dfs(tree[id].right, deep+1);//向右遍历 int main() cin >> n; _for (i, 1, n) cin >> tree[i].left >> tree[i].right;//读入+建树 dfs(1, 1);//从1号节点出发,当前深度为1 cout << ans << endl;//输出答案 return 0;//完结撒花!
求二叉树中节点的最大距离
假设我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间的变数。
写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
输入要求
输入的第一行包括单独的一个数字T,表示測试序列的数目;
下面每一行为一个測试序列,測试序列是按先序序列输入字符 ,假设节点没有左或右孩子,则输入用空格表示,最后用一个空格结束一行的输入。
输出要求
输出二叉树中相距最远的两个节点之间的距离
假如输入
2
ABC DE G F
-+a *b -c d /e f
应当输出
4
6
借鉴了很多代码,最后优deepth()化到最简已经。思路就是遍历每一个节点。空节点为-1,终于的结果肯定是某个节点左子树的深度加上右子树的深度加2,所以求出每一个节点左子树和右子树的深度,取左右子树深度之和加2的最大值就可以。
Code:
#include<bits/stdc++.h> using namespace std; typedef struct BTree { char data; struct BTree *left,*right; }BTree; BTree *CreatBTree() { char ch=getchar(); if(ch==‘ ‘) return NULL; BTree *temp=(BTree *)malloc(sizeof(BTree)); temp->data=ch; temp->left=CreatBTree(); temp->right=CreatBTree(); return temp; } int deepth(BTree *T,int &maxDis) { if(!T) return -1; int L=deepth(T->left,maxDis); int R=deepth(T->right,maxDis); maxDis=max(maxDis,L+R+2); return max(L,R)+1; } void delBTree(BTree *p) { if(p) { delBTree(p->left); delBTree(p->right); free(p); } } int main() { int t; cin>>t; while(t--) { getchar();//吃掉回车 int maxDis=-1; BTree *root=CreatBTree(); getchar();//吃掉最后结尾的空格 deepth(root,maxDis); cout<<maxDis<<endl; delBTree(root); } return 0; }
以上是关于w9-2 求二叉树中节点间的宽度的主要内容,如果未能解决你的问题,请参考以下文章