三叉树的建立 以及 前序遍历

之前做了一道题,使用到了三叉树结构。

题目大概是这样。第一行输入n,之后输入n行,每行输入4个数字,分别为子节点,左孩子,中孩子,右孩子(确保每个根已经在之前出现过,孩子为空输入0)。建立三叉树结构并前序遍历。

例如: 

输入为:

8

1 3 4 5

3 7 8 0

4 0 0 0

5 0 0 9

7 6 0 0

8 0 0 0

9 0 0 0

6 0 0 0

前序遍历的结果是  1 3 7 6 8 4 5 9

 

代码实现:

#include <cstdio>
#include <stdlib.h>
#include <cstring>
#include <iostream>

using namespace std;
int n;
int input[1000][4];    //记录输入
typedef struct node
{
	struct node *lchild;
	struct node *mchild;
	struct node *rchild;
	int data;
}TriTreeNode, *TriTree;
void PreOrder(TriTreeNode* node)   //先序遍历 
{
	cout << node->data << " ";
	if (node->lchild != NULL) PreOrder(node->lchild);
	if (node->mchild != NULL) PreOrder(node->mchild);
	if (node->rchild != NULL) PreOrder(node->rchild);
	return;

}
void CreateTree(TriTreeNode* node)
{
	int i = 0;
	for (i = 1; i <= n; i++) {
		if (input[i][0] == node->data) break;
	}
	if (input[i][1] != 0) {
		TriTreeNode *anode = new TriTreeNode;
		node->lchild = anode;
		anode->data = input[i][1];
		CreateTree(anode);
	}
	else node->lchild = NULL;

	if (input[i][2] != 0) {
		TriTreeNode *anode1 = new TriTreeNode;
		node->mchild = anode1;
		anode1->data = input[i][2];
		CreateTree(anode1);
	}
	else node->mchild = NULL;

	if (input[i][3] != 0) {
		TriTreeNode *anode2 = new TriTreeNode;
		node->rchild = anode2;
		anode2->data = input[i][3];
		CreateTree(anode2);
	}
	else node->rchild = NULL;
}
int main()
{
	cin >> n;     //输入的组数 
	int rt, a, b, c;
	for (int i = 1; i <= n; i++) {
		cin >> rt >> a >> b >> c;
		input[i][0] = rt;
		input[i][1] = a;
		input[i][2] = b;
		input[i][3] = c;
	}

	TriTree root = new TriTreeNode;
	root->data = input[1][0];
	CreateTree(root);
	PreOrder(root);
	system("pause");
	return 0;
}

 

 

运行结果:

 

              

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值