怎么根據序列畫二叉樹 求一個編程,將兩棵二叉排序樹合并為一棵二叉排序樹?
求一個編程,將兩棵二叉排序樹合并為一棵二叉排序樹?提供一種思路:遍歷第二棵樹,將每個元素依次插入第一棵二叉樹,從而達到合并的目的。二叉排序樹的插入算法如下://將key void insertbst(
求一個編程,將兩棵二叉排序樹合并為一棵二叉排序樹?
提供一種思路:遍歷第二棵樹,將每個元素依次插入第一棵二叉樹,從而達到合并的目的。二叉排序樹的插入算法如下://將key void insertbst(T,key){if(T==null){T=new BiTree T->lchild=T->rchild=null T->data=key return}if(key< T->data)insertbst(T->lchild,key)else插入二叉排序樹中,以便BST(T->rchild,key)}
!][包括]struct bitnode*stack[100
]struct bitnode///定義結構體
{
![char data]struct bitnode*lchild,*rchild
!][char[char]scan[scanf([[[[[[[char]scanf([[[[[[[[[[[C]scanf(%scan(”“”“”“)”“)”Bitnode)
P->data=ch
稍后(P->lchild)
稍后(P->rchild)
}
void print(struct Bitnode*P)//預序遍歷(輸出二叉樹)
{
int i=-1
while(1)
{
while(P!=null)
]{
堆棧[i]=P->rchild/*printf(”確定?N“)*/
printf(”%C“,P->data)
P=P->lchild
}
如果(I!=-1)
{
P=stack[i
]i-->
else
return
}
void main()//main function
{
]struct bitnode*P,*t
later(P)
print(P)
)}
正常,需要花費更多時間。首先需要了解堆棧的操作和意義,還需要了解遍歷二叉樹的思想。有人用節(jié)點著色來編寫非遞歸算法,即黑、灰、白三種顏色代表節(jié)點的狀態(tài),未被訪問的節(jié)點為白色,未被訪問的節(jié)點為灰色,被訪問的節(jié)點為黑色。對于中間順序遍歷,除非訪問了左子樹,否則需要訪問當前節(jié)點,所以依次沿左子樹搜索,找到葉子后訪問,然后退出右堆棧上的元素,并在右子樹上執(zhí)行相應的操作,直到堆棧為空。