#include <iostream>
using namespace std ;
class Tree
{
    public :
        int number ;
        class Tree *left ;
        class Tree *right ;
        void insert_tree(class Tree **header , int number) ;
        void print_tree(class Tree *header , int lever) ;
        void front(class Tree *header) ;
        void middle(class Tree *header) ;
        void back(class Tree *header) ;
};

int main()
{
    Tree tree ;
    Tree *header = NULL ;
    int i ;
    int buffer[10] ;
    for(i = 0 ; i < 10 ; i++)
    {
        buffer[i] = rand()%100 ;
    }
     for(i = 0 ; i < 10 ; i++)
    {
        tree.insert_tree(&header , buffer[i]) ;
    }
    tree.print_tree(header,0);
    cout << endl<< "前序遍历: " <<endl ;
    tree.front(header) ;
    cout << endl << "中序遍历: "<< endl ;
    tree.middle(header) ;
    cout << endl << "后序遍历: " << endl ;
    tree.back(header);
    getchar();
}

void Tree::insert_tree(class Tree **header , int number)
{
    Tree *New = NULL ;
    New = new Tree[10] ;
    if(NULL == New)
	   return ;
	New->number = number ;
    New->left = NULL ;
    New->right = NULL ;
	Tree **link = header ;
	Tree *cur ;
	while(cur = *link)
	{
		if(New->number < cur->number)
			link = &(cur->left) ;
		else
			link = &(cur->right) ;
	}
	*link = New ;
}
void Tree::print_tree(Tree *header , int lever)
{
    if(header == NULL)
		return ; 

	print_tree(header->right , lever+1);
	int i ;
	for(i = 0 ; i < lever ; i++)
		cout<<'\t';
	cout << header->number << endl;
	print_tree(header->left , lever+1);
}

void Tree::front(class Tree *header)
{
    if(header == NULL)
		return ;
	cout <<' '<<header->number ;
	front(header->left);
	front(header->right);
}

void Tree::middle(class Tree *header)
{
    if(header == NULL)
		return ;
	middle(header->left);
    cout<<' '<< header->number ;
	middle(header->right);
}

void Tree::back(class Tree *header)
{
    if(header == NULL)
		return ;
	back(header->left);
	back(header->right);
	cout <<' '<<header->number ;
}

C++实现二叉树的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  3. c 二叉树的使用

    简单的通过一个寻找嫌疑人的小程序 来演示二叉树的使用 #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  4. Java 二叉树遍历右视图-LeetCode199

    题目如下: 题目给出的例子不太好,容易让人误解成不断顺着右节点访问就好了,但是题目意思并不是这样. 换成通俗的意思:按层遍历二叉树,输出每层的最右端结点. 这就明白时一道二叉树层序遍历的问题,用一个队 ...

  5. 数据结构:二叉树 基于list实现(python版)

    基于python的list实现二叉树 #!/usr/bin/env python # -*- coding:utf-8 -*- class BinTreeValueError(ValueError): ...

  6. [LeetCode] Path Sum III 二叉树的路径和之三

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  7. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点

    Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...

  8. [LeetCode] Verify Preorder Serialization of a Binary Tree 验证二叉树的先序序列化

    One way to serialize a binary tree is to use pre-oder traversal. When we encounter a non-null node, ...

  9. [LeetCode] Binary Tree Vertical Order Traversal 二叉树的竖直遍历

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  10. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

随机推荐

  1. [ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word => debugger;)

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/41242993 本文作者:sushengmiyan ------------------ ...

  2. FFmpeg源代码结构图 - 解码

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  3. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  4. Tomcat集群如何同步会话

    Tocmat集群中最重要的交换信息就是会话消息,对某个tomcat实例某会话做的更改要同步到集群其他tomcat实例的该会话对象,这样才能保证集群所有实例的会话数据一致.在tribes组件的基础上完成 ...

  5. Linux之mailx的使用

    mailx是UNIX系统上用来处理邮件的工具,使用它可以发送,读取邮件.下面看看如何使用它来发送邮件. 发送格式 mailx -s subject user@xxx.com < message_ ...

  6. Android的DatePicker和TimePicker-android学习之旅(三十八)

    DatePicker和TimePicker简介 DatePicker和TimePicker是从FrameLayout继承而来,他们都是比较简单的组件.时间改变时间分别添加OnDateChangeLis ...

  7. 漫谈android系统(4)bring up panel

    点击打开链接 版权声明: 作者:alex wang 版权:本文版权归作者和CSDN共有 转载:欢迎转载,为了保存作者的创作热情,请按要求[转载],谢谢 要求:未经作者同意,必须保留此段声明:必须在文章 ...

  8. 03 ProgressBar 进度条

    >      style="?android:attr/progressBarStyleSmall" 样式                 android:progress= ...

  9. 就这么 来ADO.net类操作数据库

    使用ADO.net操作数据库其实也是很简单,而且使用频率蛮高的一种方式.话不多说,上代码才更容易理解. 首先,先要引入数据库操作相关的命名空间,这样才能使用下面的代码 //数据库连接引用的命名空间 u ...

  10. 1022. Digital Library (30) -map -字符串处理

    题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...