pta 建立与遍历二叉树

以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。

输入格式:

字符串形式的先序序列(即结点的数据类型为单个字符)

输出格式:

中序遍历结果

输入样例:

在这里给出一组输入。例如:

ABC##DE#G##F###

输出样例:

在这里给出相应的输出。例如:

CBEGDFA

参考了大佬们的代码,写一下博客方便复习

(有个问题没解决,为啥不能用string类型而用char) 

#include<bits/stdc++.h>
using namespace std;
typedef struct node BinTree;
//创建字符行数组储存先序序列
char str[1000];
//i记录读到哪一个字符了
int i=0;
//建立树的结构
struct node
{
	char data;
	BinTree *Left;
	BinTree *Right;
}*T;//T应该要是指针型的struct node 
//创建树
BinTree *CreatBinTree ()
{
	//读入#时说明该位置为空
    //i++需要写在前面,防止str【i】==‘#’时不能在读入后面的
 	if(str[i++] == '#') return NULL;
 	//建立一个新的节点储存读入的字符
    //new和malloc类似但是前者不需要初始化也不需要先确定所需内存空间大小
	BinTree *T=new BinTree;
	//前面判断是否为‘#’时先使i+1了但是此时data需要的是之前的字符
	T->data=str[i-1];
	//先序是:先-左-右,所有先创建左边的节点
	T->Left=CreatBinTree();
	T->Right=CreatBinTree();
	//读完最后一个字符需要返回T的地址,方便进行中序遍历
	return T;
}
void Inoder(BinTree *T)
{
	if(T!=NULL)
	{
		Inoder(T->Left);
		printf("%c",T->data);
		Inoder(T->Right );
	}
}
int main()
{
	scanf("%s",str);
	T=CreatBinTree();
	Inoder(T);
	return 0;
}

完全二叉树的层序遍历是一种常见的树遍历方法,特别适用于完全二叉树。层序遍历按照树的层次从上到下、从左到右依次访问每个节点。以下是层序遍历的实现步骤和代码示例: ### 实现步骤 1. **初始化**:使用一个队列来存储待访问的节点。首先将根节点加入队列。 2. **遍历**:当队列不为空时,执行以下操作: - 从队列中取出一个节点,访问该节点。 - 将该节点的左子节点(如果存在)加入队列。 - 将该节点的右子节点(如果存在)加入队列。 ### 代码示例 ```python from collections import deque class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def level_order_traversal(root): if not root: return [] result = [] queue = deque([root]) while queue: level_size = len(queue) current_level = [] for _ in range(level_size): node = queue.popleft() current_level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) result.append(current_level) return result # 示例用法 # 构建一个完全二叉树 # 1 # / \ # 2 3 # / \ / # 4 5 6 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) print(level_order_traversal(root)) ``` ### 输出 ``` [[1], [2, 3], [4, 5, 6]] ``` 这个代码示例展示了如何对一个完全二叉树进行层序遍历,并返回每一层的节点值列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值