C++二叉树的层次构建、先序构建、层次遍历、先序遍历等

层次构建二叉树,先序遍历二叉树

//层次构建二叉树,先序遍历二叉树
//输入样例:12345000000 先序输出 12453
#include <bits/stdc++.h>

using namespace std;

struct Treenode{
	char data;
	Treenode *lchild;
	Treenode *rchild;
	Treenode(char c):data(c),lchild(NULL),rchild(NULL){}
};

Treenode *creat()//层次构建树
{
	queue<Treenode*>myqueue;
	char x;
	cin>>x;
	if(x=='0')  return NULL;
	Treenode* root=new Treenode(x);
	myqueue.push(root);
	while(!myqueue.empty())
	{
		Treenode *T=myqueue.front();
		myqueue.pop();
		char y;
		cin>>y;
		if(y=='0')   T->lchild=NULL;
		else
		{
			T->lchild=new Treenode(y);
			myqueue.push(T->lchild);
		}
		char z;
		cin>>z;
		if(z=='0')  T->rchild=NULL;
		else
		{
			T->rchild=new Treenode(z);
			myqueue.push(T->rchild);
		}
	}
	return root;
}

void preorder(Treenode* root)//先序输出
{
	if(root==NULL) return ;
	cout<<root->data<<endl;
	preorder(root->lchild);
	preorder(root->rchild);
	return ;
}

int main()
{
	Treenode *root=creat();
	if(root==NULL) printf("NULL\n");
	printf("先序序列:\n");
	preorder(root);
	return 0;
}`

/*****************************************************/
先序构建二叉树,层次遍历二叉树

/*
先序构建二叉树,层次遍历二叉树
二叉树遍历:abc##de#g##f### 
输出:a b c d e f g
*/
#include <bits/stdc++.h> 


using namespace std;

struct Treenode{
	char data;
	Treenode* leftchild;
	Treenode* rightchild;
	Treenode(char d):data(d),leftchild(NULL),rightchild(NULL){}
};

int i;

Treenode* Creattree(string str)//先序构建树
{
	char c=str[i++];  
	if(c=='#') return NULL;
	Treenode* T=new Treenode(c);
	T->leftchild=Creattree(str);
	T->rightchild=Creattree(str);
	return T;
}

void BFS(Treenode *T)//层次输出
{
	if(!T) return ;
	queue<Treenode*>myqueue;
	myqueue.push(T);
	while(!myqueue.empty())
	{
		Treenode* c=myqueue.front();
		myqueue.pop();
		cout<<c->data<<endl;
		if(c->leftchild) myqueue.push(c->leftchild);
		if(c->rightchild) myqueue.push(c->rightchild);
	}
	return ; 
} 

int main()
{
	string str;
	while(cin>>str)
	{
		i=0;
		Treenode* T=Creattree(str);
		BFS(T);
	}
	return 0;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用 C++ 实现二叉树先序遍历层次遍历的代码,带有详细注释: ``` #include <iostream> #include <queue> using namespace std; // 定义二叉树的节点结构体 struct TreeNode { int val; // 节点的值 TreeNode* left; // 左子节点指针 TreeNode* right; // 右子节点指针 TreeNode(int v) : val(v), left(nullptr), right(nullptr) {} // 构造函数 }; // 先序遍历二叉树,参数为根节点指针 void preOrder(TreeNode* root) { if (root == nullptr) { // 如果节点为空,直接返回 return; } cout << root->val << " "; // 输出节点的值 preOrder(root->left); // 递归遍历左子树 preOrder(root->right); // 递归遍历右子树 } // 层次遍历二叉树,参数为根节点指针 void levelOrder(TreeNode* root) { if (root == nullptr) { // 如果节点为空,直接返回 return; } queue<TreeNode*> que; // 定义队列,用于存储每一层的节点 que.push(root); // 将根节点入队 while (!que.empty()) { // 队列非空时循环 TreeNode* node = que.front(); // 取出队首节点 que.pop(); // 将队首节点出队 cout << node->val << " "; // 输出节点的值 if (node->left != nullptr) { // 如果左子节点不为空,入队 que.push(node->left); } if (node->right != nullptr) { // 如果右子节点不为空,入队 que.push(node->right); } } } int main() { // 构建一棵二叉树 TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); root->right->left = new TreeNode(6); root->right->right = new TreeNode(7); // 先序遍历二叉树 cout << "Pre-order traversal: "; preOrder(root); cout << endl; // 层次遍历二叉树 cout << "Level-order traversal: "; levelOrder(root); cout << endl; return 0; } ``` 这个程序将输出以下结果: ``` Pre-order traversal: 1 2 4 5 3 6 7 Level-order traversal: 1 2 3 4 5 6 7 ``` 其中,先序遍历的结果为 `1 2 4 5 3 6 7`,层次遍历的结果为 `1 2 3 4 5 6 7`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值