之前做了一道题,使用到了三叉树结构。
题目大概是这样。第一行输入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;
}
运行结果: