树的创建和遍历

#include <stdio.h>
#include <stdlib.h>

struct node{
    char data;

struct node* left;
    struct node* right;
};

void preorder(struct node* root)        //前序遍历
{
    if(root == NULL)
        return ;
    else {
        printf("%c\t", root->data);
        pre_order(root->left);
        pre_order(root->right);
    }
}
void minorder(struct node* root)        //中序遍历
{
    if(root == NULL)
        return ;
    else {
        min_order(root->left);
        printf("%c\t", root->data);
        min_order(root->right);
    }
}
void postorder(struct node* root)        //后序遍历
{
    if(root == NULL)
        return ;
    else {
        postorder(root->left);
        postorder(root->right);
        printf("%c\t", root->data);
    }
}
struct node* create(struct node* root)    //利用前序创建树,中序和后序不能创建树
{
    char ch = getchar();    
    if(ch == ‘#‘)
        return NULL;
    else {
        root = malloc(sizeof(struct node));
        root->data = ch;
        root->left = create(root->left);
        root->right = create(root->right);
        return root;
    }
}

int main()
{
    struct node* root = NULL;

root = create(root);

preorder(root);
    printf("\n");
    minorder(root);
    printf("\n");
    postorder(root);
    printf("\n");

return 0;
}

时间: 2024-08-27 16:32:46

树的创建和遍历的相关文章

数据结构学习笔记(五) 树的创建和遍历

创建(先序创建和根据先序和中序进行创建)和遍历(先序遍历.中序遍历.后序遍历.非递归堆栈遍历.层次遍历): package tree; public class XianCreateTree { private static Node header; //非递归遍历的堆栈头指针 private static Node first; //层次遍历的尾和头指针(队尾插入,对头出去) private static Node rear; private static Node front; privat

二叉树:树的创建和遍历

前面介绍的链表,栈,队列都是一种顺序容器,访问元素的时候都是通过位置来访问的.如果想要通过值的方式来获取数据,只能通过遍历的方式.这在时间上消耗比较大.而二叉树可以做到不用遍历就可以通过值的方式来获取数据.二叉树是按值来保存元素,也按值来访问元素. 二叉树的相关术语: 树的结点:包含一个数据元素及若干指向子树的分支: 孩子结点:结点的子树的根称为该结点的孩子: 双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲: 兄弟结点:同一双亲的孩子结点: 堂兄结点:同一层上结点: 祖先结点: 从

树的创建与遍历

#include<iostream>#include<list>#include<fstream>#include<queue>using namespace std; template<class T>class Tree //树的建立{ T *NA; list<int> *HL; int root; int sizeN,sizeC; int maxN;public: Tree(int n=100):root(-1),sizeN(0

创建先序二叉树-创建层次遍历树

创建先序二叉树 #include<iostream> using namespace std; class BinTreeNode { public:     char ch;     BinTreeNode(int value){ch=value;}     BinTreeNode *left,*right; }; BinTreeNode* create_tree() {     char item;     BinTreeNode *t,*t_l,*t_r;     cin>>

C++ 创建和遍历二叉树

一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新. #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(BiTN

[数据结构]二叉树创建与遍历

实验报告:二叉树创建与遍历 一.问题描述 二叉树是一种实用范围很广的非线性结构,一棵非空二叉树有也只有一个根结点,每个结点最多有两个子树,我们称为左子树与右子树,当一个结点的左.右子树都是空的时,沃恩称此结点为叶子结点. 二叉树有一些很好的性质,这里不再赘述.考虑如何存储一棵树,本实验选择使用链式存储结构——二叉链表:如果事先知道需要存储的二叉树是满二叉树或者完全二叉树,则可以考虑使用顺序存储,否则将浪费大量的存储空间. 对于一棵既成的二叉树,有三种遍历方式——先序.中序与后序.可以证明,一棵形

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

C# Lambda表达式详解,及Lambda表达式树的创建

最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介.优雅. Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使

9判断整数序列是不是二元查找树的后序遍历结果

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4252095.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 解题思路: 1.输入一个整型数组a,根据该数组创建二