数据结构:二叉排序树(创建二叉排序树及其中序遍历)

#include<stdio.h>
#include<stdlib.h>
 typedef struct Node
{
int data;
struct Node *left, *right;
}Node;
Node * CreateTree(int n)
{
    int a[101],i;
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    Node* t1;
    t1=(Node*)malloc(sizeof(Node));
    t1->data=a[0];
    t1->left=t1->right=NULL;
    for(i=1;i<n;i++)
    {
        Node* t2,*p=t1,*q;
        t2=(Node*)malloc(sizeof(Node));
        t2->data=a[i];
        t2->left=t2->right=NULL;
        while(p)
        {
            if(p->data>a[i])
            {
                q=p;
                p=p->left;
            }
            else
            {
                q=p;
                p=p->right;
            }
        }
        if(q->data>a[i])
        q->left=t2;
        else
        q->right=t2;
    }
    return t1;
}
void Preorder(Node *tree)
{
    if(tree==NULL)
    return ;
    Preorder(tree->left);
    printf("%d ",tree->data);
    Preorder(tree->right);
}
int main()
{
    Node *tree;
    int n;
    while(~scanf("%d",&n))
    {
        tree=CreateTree(n);
        Preorder(tree);
        printf("\n");
    }
} 

原文地址:https://www.cnblogs.com/zzjam--1/p/11336961.html

时间: 2024-10-09 02:34:07

数据结构:二叉排序树(创建二叉排序树及其中序遍历)的相关文章

数据结构 二叉树 已知前序中序遍历求后续遍历的递归实现

代码很短,实现起来也很简单,下面是代码: // // main.cpp // PreMidgetPost // // Created by xin wang on 4/29/15. // Copyright (c) 2015 xin wang. All rights reserved. // #include <iostream> //链表二叉树的节点类 template <class T> class BinaryTreeNode{ public: BinaryTreeNode(

【算法与数据结构】二叉树的 中序 遍历

前一篇写了二叉树的先序遍历,本篇记录一下二叉树的中序遍历,主要是非递归形式的中序遍历. 由于距离上篇有好几天了,所以这里把二叉树的创建和存储结构也重复的写了一遍. 二叉树如下 二叉树的存储方式依然是二叉链表方式,其结构如下 typedef struct _tagBinTree { unsigned char value; struct _tagBinTree* left; struct _tagBinTree* right; }BinTree, *PBinTree; 先序递归形式的创建二叉树代码

算法实验-二叉树的创建和前序-中序-后序-层次 遍历

对于二叉树的创建我是利用先序遍历的序列进行创建 能够对于树节点的内容我定义为char型变量 '0'为空,即此处的节点不存在 头文件 Tree.h //链式二叉树的头文件 #pragma once #include<iostream> #include<queue> using namespace std; class BinaryTreeNode { public: char data; BinaryTreeNode *leftChild,*rightChild; BinaryTr

【数据结构】中序遍历线索二叉树

昨天写了个二叉树遍历,自以为对二叉树很了解了.自大的认为线索二叉树不过是加了点线索而已,不足挂齿.可是当真的自己编程序写的时候才发现完全不是那么容易.在有线索的情况下,如何判别Link类型的下一节点,如何不用栈跳过已访问节点搞得脑子晕晕的. 折腾一个晚上,才根据书上把线索二叉树的建立.中序遍历给写出来.要回去继续好好的理清关系. #include <stdio.h> #include <stdlib.h> typedef enum PointerTag{Link, Thread};

二叉树给出两种遍历序列(含中序遍历)创建一颗先序遍历二叉树

没有测试太多的例子,不知正确性怎样... #include<cstdio> #include<cstdlib> #include<cmath> #include<map> #include<queue> #include<stack> #include<vector> #include<algorithm> #include<cstring> #include<string> #incl

(编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. 可以和(编程训练)再回首,数据结构--二叉树的前序.中序.后序遍历(递归)对比着看 [问题描述] 根据顺序存储结构建立二叉树的二叉链表,并对二叉树进行先序.中序.后序遍历. [基本要求] ·功能:根据顺序存储结构建立二叉树的二叉链表,并进行先序.中序.后序遍历. ·输入:输入二叉树的顺序存储. ·输出:二叉树的先序.中序.后序遍历序

线索二叉树实例(前序创建,中序遍历)--2018.5.15

#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef enum{Link, Thread} PointerTag; //link = 0表示指向左右孩子指针 //Thread = 1表示指向前驱或后继的线索 typedef struct BitNode { char data; //结点数据 struct BitNode *lchild; //左右孩子指针 struct BitNode

二叉树的广义表创建及中序遍历、后序遍历、层次遍历的非递归算法(C语言)

广义表创建二叉树关于用广义表的形式表示二叉树的形式如下 ①广义表中的一个字母代表一个结点的数据信息.②每个根结点作为由子树构成的表的名字放在义表的前面.③每个结点的左子树与右子树之间用逗号分开.若结点只有右子树面无左子树,则该逗号不能省略.④在整个广义表的末尾加一个特殊符号(如“@”)作为结束标志. 下面先用自然语言描述算法如下.依次从广义表中取得-个元素,并对取得的元素做如下相应的处理. ①若当前取得的元素为字母,则按如下规则建立一个新的(链)结点.a)若该结点为二叉树的根结点,则将该结点的地

Java数据结构系列之——树(4):二叉树的中序遍历的递归与非递归实现

package tree.binarytree; import java.util.Stack; /** * 二叉树的中序遍历:递归与非递归实现 * * @author wl * */ public class BiTreeInOrder { // 中序遍历的递归实现 public static void biTreeInOrderByRecursion(BiTreeNode root) { if (root == null) { return; } biTreeInOrderByRecursi

数据结构之二叉树 树结构练习——排序二叉树的中序遍历 (排序建树+中序遍历)

树结构练习——排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值.现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序 遍历的结果. 输入 输入包含多组数据,每组数据格式如下.