1. 程式人生 > >C 查詢二叉樹的基本操作

C 查詢二叉樹的基本操作

//
//  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; }