二叉树的递归建立和遍历

来源:互联网 发布:线下数据采集 编辑:程序博客网 时间:2024/05/17 12:05

二叉树建立及遍历
一、实验目的:
1) 掌握二叉树的概念和基本操作。
2) 掌握二叉树的创建和遍历。
3) 通过本实验可以使学生掌握二叉树的相关算法和概念。
4) 培养解决实际问题、编写程序的能力。
二、实验内容
生成二叉树(必作)
递归先序遍历该二叉树(遍历算法三选一)
递归中序遍历该二叉树(遍历算法三选一)
非递归先序遍历该二叉树(遍历算法三选一)
三、实验步骤
1、输入(先序)数据,以二叉链表作为存储结构,建立二叉树。
2、采用递归算法对其进行遍历(先序、中序或后序),将遍历结果打印输出。
3、测试数据,如:
  ABCффDEфGффFффф(其中ф表示空格字符)
  则输出结果为 先序:ABCDEGF
  中序:CBEGDFA
  后序:CGBFDBA

1,实例化一棵树和一个指向树的根节点,用第一棵树的方法给第二个根节点赋值等操作,创建后的二叉树是第二棵树。

2,函数传参且参数为指针时,*不能改变指针的值, 用*&才能改变指针的值,区别如下例子
后面附上C语言版本

void func(int* p, int*& pr){    p++;    pr++;}int main(){    int a[2];    int* b = &a[0];    int* c = &a[0];    std::cout << "\nBefore call to function:" << std::endl;    std::cout << "b = " << b << std::endl;    std::cout << "c = " << c << std::endl;    func(b, c);    std::cout << "\nAfter call to function:" << std::endl;    std::cout << "b = " << b << std::endl;    std::cout << "c = " << c << std::endl;    return 0;}

http://www.cplusplus.com/forum/unices/23534/)

下面附上c++实现的二叉树

#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;typedef char elemType;class BTree{  public:    elemType data;    BTree *left;    BTree *right;    void createBT(BTree *&root);    void preOrder(BTree *root);    void inOrder(BTree *root);    void postOrder(BTree *root);    void visit(elemType e);};void BTree::createBT(BTree *&root){    elemType n;    n = getchar();    if (n == ' ')    {        root = NULL;    }    else    {        root = (BTree *)malloc(sizeof(BTree));        root->data = n;        createBT(root->left);        createBT(root->right);    }}void BTree::preOrder(BTree *root){    if (root != NULL)    {        this->visit(root->data);        preOrder(root->left);        preOrder(root->right);    }}void BTree::inOrder(BTree *root){    if (root != NULL)    {        inOrder(root->left);        this->visit(root->data);        inOrder(root->right);    }}void BTree::postOrder(BTree *root){    if (root != NULL)    {        postOrder(root->left);        postOrder(root->right);        this->visit(root->data);    }}void BTree::visit(elemType e){    cout << e << " ";}int main(){    BTree bt, *p = NULL;    cout << "please input element (space represents null node): " << endl;    bt.createBT(p);    cout << "preOrder: " << endl;    bt.preOrder(p);    cout << "\ninOrder: " << endl;    bt.inOrder(p);    cout << "\npostOrder: " << endl;    bt.postOrder(p);    return 0;}

输入数据:

ABC  DE G  F  //注意F后面有三个空格

输出:

preOrder:A B C D E G FinOrder:C B E G D F ApostOrder:C G E F D B A

C语言版本

#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;typedef char ElementType;struct TreeNode{    ElementType data;    TreeNode *left;    TreeNode *right;};TreeNode *createTree(){    char c;    TreeNode *T = (TreeNode *)malloc(sizeof(TreeNode));    scanf("%c", &c);    if (' ' == c)    {        T = NULL;    }    else    {        T = (TreeNode *)malloc(sizeof(TreeNode));        T->data = c;        T->left = createTree();        T->right = createTree();    }    return T;}void preorder(TreeNode *root){    if (root != NULL)    {        cout << root->data << " ";        preorder(root->left);        preorder(root->right);    }}int main(){    TreeNode *T;    T = createTree();    preorder(T);    return 0;}
0 0
原创粉丝点击