五 試編寫一演算法,判別某一二叉樹是否為二叉排序樹

時間 2022-02-27 23:15:28

1樓:_超人不會肥

; 程式功能:每隔約1秒鐘在螢幕右上角顯示一次當前的時間(時:分:秒)

; 按任意鍵結束本程式的執行,但是在螢幕右上角依然看到不停變化的時間

; 涉及的知識點:

; (1) 8號中斷

; (2) 擴充8號中斷的中斷處理程式

; (3) 中斷處理程式駐留在記憶體

; (4) 獲取系統當前時間

; (5) 在螢幕指定位置顯示串

; 參考資料:教材中附錄有關中斷的內容

; cmos資料的讀寫;

.386

stack segment use16 stack

db 100 dup (0)

stack ends

code segment use16

assume cs:code,ds:code,ss:stack

count db 18

hour db ?, ?, ':'

min db ?, ?, ':'

sec db ?, ?

buf_len = $ - hour

cursor dw ?

old_int dw ?, ?

message db 0dh,0ah,'press any key to return',0dh,0ah,0dh,0ah,'$'

; 擴充的 8號中斷處理程式

new08h proc far

pushf

call dword ptr cs:old_int

dec cs:count

jz disp

iret

disp: mov cs:count,18

stipusha

push ds

push es

mov ax, cs

mov ds, ax

mov es, ax

call get_time

mov bh, 0

mov ah, 3

int 10h

mov cursor, dx

mov bp, offset hour

mov bh, 0

mov dh, 0

mov dl, 80 - buf_len

mov bl, 07h

mov cx, buf_len

mov al, 0

mov ah, 13h

int 10h

mov bh, 0

mov dx, cursor

mov ah, 2

int 10h

pop es

pop ds

popa

iret

new08h endp

; 取時間

; 參考資料,cmos資料的讀寫

get_time proc

mov al, 4

out 70h, al

jmp $+2

in al, 71h

mov ah,al

and al,0fh

shr ah, 4

add ax, 3030h

xchg ah, al

mov word ptr hour, ax

mov al, 2

out 70h, al

jmp $+2

in al, 71h

mov ah, al

and al, 0fh

shr ah, 4

add ax, 3030h

xchg ah, al

mov word ptr min, ax

mov al, 0

out 70h, al

jmp $+2

in al, 71h

mov ah, al

and al, 0fh

shr ah, 4

add ax, 3030h

xchg ah, al

mov word ptr sec, ax

retget_time endp

; 延時程式段

delay proc

push ecx

mov ecx,0

l1: inc ecx

cmp ecx, 04000000h

jb l1

pop ecx

retdelay endp

; 主程式開始

begin: ; 要顯示 message串中的內容,

; 但該變數又定義在**段中,能否用9號功能呼叫呢?

push cs

pop ds

lea dx, message

mov ah, 9

int 21h

; 獲取原 8 號中斷的中斷處理程式的入口位址

mov ax, 3508h

int 21h

mov old_int, bx

mov old_int+2, es

; 設定新的 8號中斷的中斷處理程式的入口位址

mov dx, offset new08h

mov ax, 2508h

int 21h

; 希望該程式在執行過程中,能看到 8號中斷產生後的執行效果

; 因而,緩慢(即代有延時功能)的顯示一些字元。

mov dl,30h

loop_disp:

cmp dl, 100

jnz continue

mov al, 30h

continue:

call delay

mov ah, 2

int 21h

inc dl

; 判斷有無擊鍵,無則繼續。有按鍵中止

mov ah, 0bh

int 21h

cmp al, 0

jz loop_disp

exit:

; 原來的程式是將中斷處理程式的入口位址復原

; lds dx, dword ptr old_int

; mov ax, 2508h

; int 21h

; mov ah, 4ch

; 將新的中斷處理程式駐留記憶體

mov dx, offset delay+14

mov cl, 4

shr dx, cl

add dx, 10h

add dx, 70h

mov al, 0

mov ah, 31h

int 21h

code ends

end begin

2樓:匿名使用者

頂你,支援樓主!有意思

這是一道資料結構的題:試寫乙個判別給定二叉樹是否為二叉排序樹的演算法,設此二叉樹以二叉鍊表作儲存結構

3樓:況玉枝將培

遞迴方法

void

alvtree(bittree

*t)else

return0;}

else

if(t->lchild!=null&&t->rchild==null)

else

if(t->rchild!=null&&t->lchild==null)

}自己寫的情況應該都考慮到了,採用的是遞迴演算法。

4樓:丹建設寧煙

intissearchtree(constbtnode

*t)else

if((t->rchild)

&&!(t->lchild))

else

}已經上機驗證成功,樓上的寫的太隨意了吧,各種情況都需要考慮地。

如何判定二叉樹是否為二叉排序樹

5樓:

typedef struct bitnodebitnode,*bitree; //二叉樹節點及節點指標型別void sortbitree(bitree root) //判斷是否是二叉排序樹

if(top) }

for(int i=0;idata>=t[i+1]->data)printf("是二叉排序樹\n");}

判斷給定的二叉樹是否為二叉排序樹

6樓:木戀曉丶

思路:若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

它的左、右子樹也分別為二叉排序樹。

遞迴遍歷就可以了,反正就是左孩子的key比根節點的key小,右孩子的key比根節點的key大,一旦有不滿足條件的就判定不是。

完整的**如下:

#include "stdio.h"

#include "stdlib.h"

typedef struct nodebitree;bitree *b[100];

bitree *createbitree()for(i=1;i<=num;i++)}return t;}int issearchtree(const bitree *t) //遞迴遍歷二叉樹是否為二叉排序樹else if((t-rchild) && !(t-lchild)) //只有右子樹情況else //左右子樹全有情況}int main(void){int flag=0;

bitree *tree;

tree=createbitree();

flag=issearchtree(tree);if(flag)printf("這棵樹是二叉排序樹!/n");elseprintf("這棵樹不是二叉排序樹!/n");

判斷一棵二叉樹是否為二叉排序樹 ( c++,資料結構)

7樓:匿名使用者

struct node

node*l; node*r;

static bool isorderedbtree(node*n, int (*cmp_func)(node*,node*))

if (!isorderedbtree(n->l, cmp_func))

}if (n->r !=0)

if (!isorderedbtree(n->r, cmp_func))

}return true;

}static bool isorderedbtree(node* n, int (*cmp_func)(node*, node*))

q.push_back(n->l);

}if (n->r != 0)

q.push_back(n->r);}}

return true;}};

判別二叉樹是否為二叉排序樹的完整程式 5

8樓:菅石

給你乙個測試**。

vc下通過。

#include

#include

struct node

int data;

node *left; //左孩子結點

node *right; //右孩子結點

void inorder(node *root) //中序遍歷,符合公升序輸出

在排序樹中插入元素

};int main()

printf("\n樹公升序輸出:");

x->inorder(x);

printf("\n");

return 0;

}很明顯地看到,當一棵二叉排序樹以中序遍歷輸出時,是輸出一組遞增序列。

這樣就可以知道,只要當一棵樹的中序遍歷輸出不是一組遞增序列時,就可判斷其不是一棵二叉排序樹。

用C語言編寫五子棋小遊戲,用C語言寫乙個五子棋遊戲

你好!現在是16點10分,還有兩個小時20分鐘。你是需要dos下的五子棋嗎?然後輸入座標下棋,是這樣的嗎。用c語言寫乙個五子棋遊戲 天拉。我也正在寫五子棋,想不出怎麼才這麼點 啊?鬱悶。我也研究下,不知道這五子棋能發揮出什麼樣的下棋水準?求乙個用c語言編寫五子棋遊戲的全部 使用語言 c 使用工具 v...