二叉树的递归创建和遍历

来源:互联网 发布:mac terminal 指令 编辑:程序博客网 时间:2024/06/05 17:08

图文均来自百度搜索

#include <iostream>  using namespace std;struct BiTNode {    char data;    struct BiTNode *lchild, *rchild;//左右孩子  };BiTNode*T;void CreateBiTree(BiTNode* &T);void Inorder(BiTNode* &T);void PreOrderTraverse(BiTNode* &T);void Posorder(BiTNode* &T);//===========================================主函数  int main() {    cout << "创建一颗树,其中A->Z字符代表树的数据,用“#”表示空树:" << endl;    CreateBiTree(T);    cout << "先序递归遍历:" << endl;    PreOrderTraverse(T);    cout << endl;    cout << "中序递归遍历:" << endl;    Inorder(T);    cout << endl;    cout << "后序递归遍历:" << endl;    Posorder(T);    cout << endl;    return 1;}//=============================================先序递归创建二叉树树  void CreateBiTree(BiTNode* &T) {    //按先序输入二叉树中结点的值(一个字符),空格字符代表空树,      //构造二叉树表表示二叉树T。      char ch;    if ((ch = getchar()) == '#')T = NULL;//其中getchar()为逐个读入标准库函数      else {        T = new BiTNode;//产生新的子树          T->data = ch;//由getchar()逐个读入来          CreateBiTree(T->lchild);//递归创建左子树          CreateBiTree(T->rchild);//递归创建右子树      }}//CreateTree   //===============================================先序递归遍历二叉树  void PreOrderTraverse(BiTNode* &T) {    //先序递归遍历二叉树      if (T) {//当结点不为空的时候执行          cout << T->data;        PreOrderTraverse(T->lchild);//          PreOrderTraverse(T->rchild);    }    else cout << "";}//PreOrderTraverse   //================================================中序遍历二叉树  void Inorder(BiTNode* &T) {//中序递归遍历二叉树      if (T) {//bt=null退层          Inorder(T->lchild);//中序遍历左子树          cout << T->data;//访问参数          Inorder(T->rchild);//中序遍历右子树      }    else cout << "";}//Inorder   //=================================================后序递归遍历二叉树  void Posorder(BiTNode* &T) {    if (T) {        Posorder(T->lchild);//后序递归遍历左子树          Posorder(T->rchild);//后序递归遍历右子树          cout << T->data;//访问根结点      }    else cout << "";}

前序遍历:

访问根结点,前序遍历左子树,前序遍历右子树 。

中序遍历:

中序遍历左子树,访问根结点,中序遍历右子树,我觉得这个投影法可以参考,方法如下:
这里写图片描述

后序遍历:

后序遍历左子树,后序遍历右子树,访问根结点

0 0
原创粉丝点击