二叉树的创建与遍历

来源:互联网 发布:js数组定义的方式 编辑:程序博客网 时间:2024/05/19 23:14

二叉树是一个极其重要的数据结构,必须稳固掌握,在下就浅谈二叉树的基本操作。首先,是二叉树的创建,创建分为三种方式,先序,中序,后序,本博文以先序为例,其他两种类似。亲身测试,能执行。代码如下:
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);    }}

先访问根节点,在访问左子树,最后访问右子树,当访问到左子树的叶子节点,先访问左节点,再访问右节点,然后递归上去到父节点级别,由于其左右叶节点的父节点早之他们先被访问,所以会跳转到访问该父节点的右兄弟,这样依次递归,最终访问完所有节点。

1 0
原创粉丝点击