#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. 给定整数a1、a2、a3、...、an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8)。

    给定整数a1.a2.a3.....an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8). 分析:此题相对于本节"寻找满 ...

  2. 侧滑面板(对viewGroup的自定义)

    额,好吧,最近一直在做侧滑的事情,到目前为止一共是学了三种方法了,一个是直接加第三方开源框架SlidingMenu,第二给是用DrawerLayout,今天这个是用谷歌官方提供的在新的support- ...

  3. FFmpeg源代码简单分析:av_write_frame()

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

  4. Android实战之ListView复选框

    项目中有用到复选框的例子,啊啊......在网上查找有关资料,大多都是过于繁琐,所以自己决定写个这个方面的demo... 先给个效果图: 在ListView中添加复选框主要注意以下几个问题: 1.Li ...

  5. Fork And Join框架初探

    首先,关于Fork And Join框架的入门资料我觉得最好的是: Java线程(十一):Fork/Join-Java并行计算框架 本文参考了这篇文章 Fork/Join框架的核心类是ForkJoin ...

  6. UE4实现描边效果

    描边效果属于常见常用的功能,现VR项目中,也需要射线选中一个物体,使物体高亮. 于是在网上找了部分资料,同时也感谢群里的一位大神的提点,总算将描边的功能实现了,这里也写一个简单的示例步骤. 1.我并不 ...

  7. iOS中 简单易懂的秒杀倒计时/倒计时

    示例代码简单易懂: 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 #import <UIKit/UIKit.h> @interface ViewCon ...

  8. 新手学python(3):yield与序列化

    1 Yield生成器 Yield是我在其他语言中没有见过的一个属性,算是python的一大特色,用好之后可以使代码更简洁.考虑一个简单的例子,文件的遍历.要遍历一个目录下的所有文件需要递归的操作.如果 ...

  9. UNIX网络编程——I/O复用:select和poll函数

    我们看到TCP客户同时处理两个输入:标准输入和TCP套接字.我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死.服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然 ...

  10. Java函数2:计算两个日期相差的天数

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ // Scann ...