二叉树是一个极其重要的数据结构,必须稳固掌握,在下就浅谈二叉树的基本操作。首先,是二叉树的创建,创建分为三种方式,先序,中序,后序,本博文以先序为例,其他两种类似。亲身测试,能执行。代码如下:
h文件
#ifndef _TREE_H
#define _TREE_H
#include<vector>
#include<iostream>
using namespace std;
typedef struct BiNode
{
char data;
BiNode *left,*right;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T);
void PrintTree(BiTree &T);
#endif
cpp文件
#include"Tree.h"
void CreateBiTree(BiTree &T)
{
char c;
cin >> c;
if('#' == c)
T = NULL;
else
{
T = new BiNode;
T->data = c;
CreateBiTree(T->left);
CreateBiTree(T->right);
}
}
此处,特别要注意输入数据的格式,不同的创建方法,输入格式不同,如果输入格式不匹配,将得不到任何结果,会处于循环递归,切记。如果你是使用先序进行创建二叉树,那么在输入数据的时候,必须要用先序的二叉树格式,此处用#代表最后的叶子节点,如果没有这个,将无穷递归下去。
二叉树的遍历与创建 一样,本例也用先序遍历为例进行说明,很简单,一看就明白,代码如下:
void PrintTree(BiTree &t)
{
if(t==NULL)
{
return;
}
else
{
cout<<t->data;
PrintTree(t->left);
PrintTree(t->right);
}
}
先访问根节点,在访问左子树,最后访问右子树,当访问到左子树的叶子节点,先访问左节点,再访问右节点,然后递归上去到父节点级别,由于其左右叶节点的父节点早之他们先被访问,所以会跳转到访问该父节点的右兄弟,这样依次递归,最终访问完所有节点。