输出利用二叉树存储的普通树的度 swust oj

输出利用二叉树存储的普通树的度
 1000(ms)
 10000(kb)
 2068 / 4759
普通树可转换成相应的二叉树(该二叉树的根结点一定缺少右儿子),反之亦然。故而可以根据相应的转换方法去统计某一二叉树对应的普通树的度。普通树的度为其结点儿子数的最大值。相应的二叉树可利用二叉树的先序递归遍历算法创建。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计该二叉树对应的森林中树的棵数。需要注意输入数据序列中的"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态(序列里面允许无效字符但需要正确处理)。
输入
输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。
输出
若表示的二叉树对应普通树,则该普通树的度;否则输出ERROR。
样例输入
AB#CD##E###
ABC####
AB##C##
ABCD###EF##G###
A##B##
样例输出
3
1
ERROR
3
1

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node
{
char data;
struct node *l,*r;
}Tree;
int obj=1,Max=0;
void init(Tree *&l)
{
char ch;
cin>>ch;
if(ch=='#') l=NULL;
else
{
l=(Tree *)malloc(sizeof(Tree));
l->data=ch;
init(l->l);
init(l->r);
}
}
void getnode(Tree *&l,int n)
{
if(l)
{
if(l->l!=NULL) getnode(l->l,n);
if(l->r!=NULL) getnode(l->r,n+1);  //普通树的度不断去访问右结点,不为空度加1;
}
Max=Max>n?Max:n;
}
int main()
{
Tree *l;
init(l);
if(l->r==NULL)//普通树的右结点必为空
{
getnode(l,obj);
cout<<Max;
}
else
cout<<"ERROR";
return 0;
}

以下是利用二叉树存储普通的代码: ```python class TreeNode: def __init__(self, val): self.val = val self.child = None self.sibling = None def create_tree(): root = TreeNode(1) node2 = TreeNode(2) node3 = TreeNode(3) node4 = TreeNode(4) node5 = TreeNode(5) node6 = TreeNode(6) node7 = TreeNode(7) root.child = node2 node2.sibling = node3 node2.child = node4 node4.sibling = node5 node3.child = node6 node6.sibling = node7 return root def get_degree(root): if root is None: return 0 degree = 0 child = root.child while child is not None: degree += 1 child = child.sibling return degree def binary_tree_degree(root): if root is None: return print("Node:", root.val, "Degree:", get_degree(root)) binary_tree_degree(root.child) binary_tree_degree(root.sibling) if __name__ == '__main__': root = create_tree() binary_tree_degree(root) ``` 上述代码中,我们定义了一个 `TreeNode` 类来表示普通中的每个节点。在 `create_tree()` 函数中,我们手动创建了一棵,并将其返回根节点。接下来,我们定义了一个 `get_degree()` 函数,该函数用于计算普通中一个节点的数。这个函数接受一个节点作为参数,并使用一个循环来遍历节点的所有子节点,并计算子节点的数量。 最后,我们定义了一个 `binary_tree_degree()` 函数来遍历整棵,并打印每个节点的数。这个函数首先打印当前节点的数,然后递归遍历当前节点的子节点和兄弟节点。 当我们运行这个程序时,它将输出以下内容: ``` Node: 1 Degree: 2 Node: 2 Degree: 2 Node: 4 Degree: 1 Node: 5 Degree: 0 Node: 3 Degree: 2 Node: 6 Degree: 1 Node: 7 Degree: 0 ``` 这表明根节点的数为 2,它有两个子节点。第一个子节点的数也为 2,它有两个子节点。第二个子节点的数为 0,它没有子节点。第二层的节点同理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值