二叉树的递归建立和遍历
来源:互联网 发布:线下数据采集 编辑:程序博客网 时间: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
- 二叉树的递归建立和遍历
- c++ 二叉树 的递归建立和递归遍历
- 二叉树的建立和遍历(递归、非递归)
- 递归建立和遍历二叉树等
- 二叉树的建立和遍历(递归)
- c++二叉树的非递归建立和遍历
- 数据结构之二叉树的递归建立和遍历
- 数据结构之二叉树的递归建立和遍历(续)
- 【数据结构基础】二叉树的建立和递归遍历
- 二叉树的建立及递归遍历
- 递归二叉树的建立于遍历
- 二叉树的建立及递归遍历
- 二叉树的建立及递归遍历
- 二叉树的建立,前中后序遍历的递归版本和非递归版本,层序遍历
- 二叉树的建立和递归遍历、非递归遍历操作
- 二叉树的建立,以及递归前中后序遍历二叉树
- 二叉树的建立(根据遍历结果构建)、遍历(非递归)和搜索
- 数据结构——二叉树的建立和遍历(递归建树&层序遍历建树)
- 线索二叉树
- 插值算法总结
- Mac下的AS快捷键
- hist的使用
- LeedCode 之 Reverse Integer
- 二叉树的递归建立和遍历
- 集合框架-静态导入
- POJ 1743 Musical Theme <后缀数组+二分>
- linux lsof命令详解
- C#中Split用法~
- 你不知道XML编程的那些事儿(一)
- HTML的新特性
- Java安全加密
- BDUtils 快速入门