建立二叉排序树_三种顺序遍历

题目描述

输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

输入描述:

输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

分析

编写insert函数

#include <iostream>
using namespace std;

struct tree_node{
    int data;
    tree_node *left;
    tree_node *right;

    tree_node(int x):data(x), left(NULL), right(NULL){} //初始化一个结点
};

void insert(int x, tree_node *root){
    if(x == root -> data) return;
    if(x < root -> data){
        if(!root -> left)//如果左边为空
            root -> left = new tree_node(x);//则以x建立一个结点,并且插入左边
        else
            insert(x, root -> left);否则,左边不空,递归插入左子树
    }else{
        if(!root -> right)// 右子树为空
            root -> right = new tree_node(x);// 直接插入右边
        else
            insert(x, root -> right);// 否则递归插入右子树
    }
}

void pre_order(tree_node *root){
    if(!root) return; // 树为空 直接返回
    cout << root -> data << " ";//先序遍历,先输出根节点
    pre_order(root -> left); //递归遍历左子树
    pre_order(root -> right);// 递归遍历右子树
}

void in_order(tree_node *root){
    if(!root) return;
    in_order(root -> left);
    cout << root -> data << " ";
    in_order(root -> right);
}

void post_order(tree_node *root){
    if(!root) return;
    post_order(root -> left);
    post_order(root -> right);
    cout << root -> data << " ";
}

int main(){
    int n;
    while(cin >> n){
        int x;
        cin >> x;
        tree_node root(x);
        --n;
        while(n--){
            cin >> x;
            insert(x, &root);
        }
        pre_order(&root); cout << endl;
        in_order(&root); cout << endl;
        post_order(&root);cout << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhuobo/p/10264461.html

时间: 2024-10-03 18:02:55

建立二叉排序树_三种顺序遍历的相关文章

C++实现二叉树的建立和三种递归遍历

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 二叉树是一种常见的数据结构,二叉树的遍历也是家常便饭的事了,这里仅仅写出一个完整的可以运行的C++代码来随便建立一个如下图所示的二叉树,建一棵二叉树是实现二叉树各种操作的基础,下面的程序也很简单,这只是二叉树练习的开始,以后的博文中,将会紧紧围绕这棵二叉树练习更多的操作:如求二叉树的大小,二叉树的深度,翻转二叉树...,这里只是基础中的基础,只是为以后的学习做铺垫. 下面给出C++代码,代码的功能包括: 1.建立如上图所示的简单的二叉树. 2.

Java学习(十八):二叉树的三种递归遍历

二叉树的三种递归遍历: 1 public class StudentNode 2 { 3 private String name; 4 5 private StudentNode leftNode; 6 7 private StudentNode rightNode; 8 9 public String getName() 10 { 11 return name; 12 } 13 14 public void setName(String name) 15 { 16 this.name = na

三种形式遍历集合

对于遍历集合获取其对象,在这里总结的三种简单的方式 方式一 : 将集合变为数组,后遍历数组 Object[] obj = list.toArray(); for(Object s : obj){ System.out.println((String) s); } 方式二 :  get()方法获取 . 但只能在list集合中使用, 只有List集合才有索引值. for(int i = 0;i<list.size();i++){ System.out.println(list.get(i)); }

二叉树的三种递归遍历实现

声明:学过二叉树的童鞋可以跳过前面的故事,直接看最后的代码实现.  你见过二叉树吗?一种很神奇的树,传说见到他的人都是幸运的.如果你没见过,好运立马降临: 怎么样?有被惊艳到吗?好运已经送到,祝你今晚睡得香甜. 好了,送完祝福,下面讲一个神奇的故事: 讲故事前,简单说说二叉树. 那么我要说的二叉树是什么呢?它是一种数据结构,数据结构是什么可以自行百度一下,这里不讨论他.举一个现实中的例子:把某个家庭看作一棵树,这家的爸爸(妈妈)有两个孩子,那么爸爸(妈妈)就是树的根,俩孩子就是这棵树的叶子,而此

C#中 sqlDataRead 的三种方式遍历读取各个字段数值

------------------------------------------------------------------------------------------------- 数据库的查询分析器中写上如下代码: ccreate table studentname( id  int   primary key  identity(1,1) not null ,name nvarchar(500) not null) insert into studentname values(

Mybatis之foreach用法----List、Array、Map三种类型遍历

在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件.特此记录下不同情况下书写方式!-------仅供大家参考------ 1. foreach元素的属性 collection: 需做foreach(遍历)的对象,作为入参时,list.array对象时,collection属性值分别默认用"list"."array"代替,Map对象没有默认的属性值.但是,在作为入参时可以使用@Param("keyName")注解来设置自

二叉树的创建与三种递归遍历

#include<iostream>struct tree{ struct tree *left; struct tree *right; int data;};tree *T;typedef struct tree *Tree,*TNode,TREE;using namespace std;void PreCreateTree(Tree& T);void PreOrder(Tree& T);void InOrder(Tree& T);void PostOrder(Tr

三种方式遍历ArrayList

package com.Test01; import java.util.ArrayList;import java.util.Iterator; public class ArrayListDemo { public static void main(String[] args) { //创建ArrayList集合对象 ArrayList<Student> array = new ArrayList<Student>(); //创建学生对象 提前定义学生类 Student s1

三种递归遍历二叉树

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 6 struct BinarySearchTreeNode 7 { 8 ElementType Element; 9 struct BinarySearchTreeNode *Left; 10 struct BinarySearchTreeNode *Right; 11 }; 12 13 int BinarySearchTreePreO