C 查詢二叉樹的基本操作
阿新 • • 發佈:2018-12-18
//
// main.c
// 二叉排序樹
//
// Created by 赫凱 on 2018/10/31.
// Copyright © 2018 赫凱. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int ElementType;
typedef struct BinaryTreeNode{
ElementType data;
struct BinaryTreeNode *LeftTreeNode;
struct BinaryTreeNode *RightTreeNode;
}BiThrNode, *BiThrTree;
//建立排序二叉樹,非遞迴
void CreatSortTree1(BiThrTree *T, int temp[10]){
int i;
BiThrTree p, p1;
(*T) = (BiThrTree)malloc(sizeof(BiThrNode));
(*T)->data = temp[0];
(*T)->LeftTreeNode = (*T)->RightTreeNode = NULL;
for (i = 1; i < 10; i++) {
p = (BiThrTree)malloc(sizeof(BiThrNode));
p->data = temp[i];
p->LeftTreeNode = p->RightTreeNode = NULL;
p1 = (*T);
while (p->data != p1->data) {
if(p->data <= p1->data){
if(p1->LeftTreeNode)
{
p1 = p1->LeftTreeNode;
}else
{
p1->LeftTreeNode = p;
p1 = p;
}
}
if(p->data > p1->data){
if(p1->RightTreeNode){
p1 = p1->RightTreeNode;
}else
{
p1->RightTreeNode = p;
p1 = p;
}
}
}
}
}
//建立排序二叉樹遞迴
BiThrTree CreatSortTree2(int temp, BiThrTree *T){
if((*T) == NULL){
(*T) = (BiThrTree)malloc(sizeof(BiThrNode));
(*T)->data = temp;
(*T)->LeftTreeNode = (*T)->RightTreeNode = NULL;
return (*T);
}else{
if(temp > (*T)->data){
(*T)->RightTreeNode = CreatSortTree2(temp, &(*T)->RightTreeNode);
}else
{
(*T)->LeftTreeNode = CreatSortTree2(temp, &(*T)->LeftTreeNode);
}
}
return (*T);
}
//中序遍歷
void putout2(BiThrTree T){
if(T)
{
putout2(T->LeftTreeNode);
printf("%d ", T->data);
putout2(T->RightTreeNode);
}
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
BiThrTree tree = NULL;
int temp[10] = {4,5,3,8,6,9,5,2,1,10}, i;
// CreatSortTree1(&tree, temp);
for (i = 0; i < 10; i++) {
CreatSortTree2(temp[i], &tree);
}
putout2(tree);
return 0;
}