二叉排序樹的建立


設計一個算法,讀入一整串整數構成一棵二叉排序樹並進行查找。

測試數據:60 35 69 84 96 13 66 34 21 0

輸出:13 21 34 35 60 66 69 84 96

輸入查找數據:40

輸出:13 21 34 35 60 66 69 84 96

算法思想:二叉排序樹的構成,從空的二叉樹開始,每次輸入一個結點數據,就建立一個新結點插入到當前已生成的二叉排序樹中,所以它的主要操作是二叉排序樹的插入運算。在二叉排序樹插入新的結點,只要保證插入后仍符合二叉排序樹的定義即可。二叉排序樹的查找過程:當二叉排序樹非空時,首先將給定值與根結點比較,若相等,則查找成功,若小於根結點,則在左子樹繼續查找,若大於根結點的值,則在右子樹上繼續查找。

代碼:

(1)中序遍歷二叉樹算法 inorder  (2)二叉排序樹的插入算法 inserbst  (3)生成二叉排序樹算法 creatord  (4)主函數

#include <iostream>
#include <stdio.h>
#include<malloc.h>
using namespace std;
typedef struct node
{
    int key;
    struct node *lchild, *rchild;
}bstnode;

void inorder(bstnode *t)
{
    if(t!=NULL)
    {
        inorder(t->lchild);
        printf("%4d",t->key);
        inorder(t->rchild);
    }//中序查找
}
bstnode * insertbst(bstnode *t,int k)
{
    bstnode *p;
    if(t==NULL)
    {
        p=(bstnode *)malloc(sizeof(bstnode));
        p->key=k;
        p->lchild=NULL;
        p->rchild=NULL;
        return (p);
    }
    else if(t->key==k) return(t);
    else if(t->key>k){t->lchild=insertbst(t->lchild,k);return (t);}
    else{t->rchild=insertbst(t->rchild,k);return(t);}
}
bstnode *creatord(){
bstnode *t;
int key;
t=NULL;
scanf("%d",&key);
while(key!=0)
    {
        t=insertbst(t,key);
        scanf("%d",&key);}
        return (t);

}
int main()
{
    //cout << "Hello world!" << endl;
    int key;
    bstnode * root;
    root=creatord();
    inorder(root);
    printf("\n input search key:");
    scanf("%d",&key);
    insertbst(root,key);
    inorder(root);
    printf("\n");

    return 0;
}

malloc函數為動態分配空間;
原型為: void * malloc(int size);

使用方法一般為:
假設你定義了一個名為Node的struct類型,你要定義一個名為a的Node類型的指針變量,使用以下語句:
Node * a=(Node *)malloc(sizeof(Node));
其中(Node *)為強制轉換,把返回類型void *轉換為Node *,sizeof(Node)為獲取Node類型占據空間的大小,如在我機子上int類型占4字節,sizeof(int)就返回4;
使用malloc需要包含#include <malloc.h>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM