二叉樹的定義:
二叉樹是一種樹形結構:
特點是與每個節點關聯的子節點至多有兩個(可為0,1,2)
每個節點的子節點有關聯位置關係
定義:二叉樹是節點的有限集合,該集合或為空集,或由乙個根元素和兩棵不相交的二叉樹組成(遞迴定義)
二叉樹的兩棵子樹分別稱為它的左子樹和右子樹
二叉樹的5種基本形態:
typedef char elemtype;
typedef struct btnode
btnode,*binarytree;
//建立乙個節點
btnode* buynode()
memset(s,0,sizeof(btnode));
return s;
}//釋放乙個節點
void freenode(btnode *s)
btnode* creattree1()
return s;
}
btnode* createtree2(elemtype *&str)
*/btnode *s=null;
if(str !=null && *str !=end)
return s;
}
void destroybtree(btnode *p)
}
void destroybtree1(btnode *p)
}
int getsize(btnode *ptr)
// nicegetsize(btnode *ptr);
int getdepth(btnode *ptr)
btnode * findvalue(btnode *ptr,elemtype x)
return p;
}}
// btnode * findparent(btnode *ptr,btnode *cp1,btnode *cp2);
btnode * findparent(btnode *ptr, btnode * cp)
btnode * parent(btnode *ptr, btnode *cp)
else
return p;
}}
bool is_full_binarytree(btnode *ptr) //(佇列)層次遍歷判斷是否滿二叉樹
if(ptr->rightchild != null)
}if(i < n)
n+=n;
} return tag;
}
bool is_comp_binarytree(btnode *ptr) //完全二叉樹
while(!qu.empty()) }
return tag;
}
實驗四 二叉樹基本操作的實現
實現鏈式儲存建立,遞迴先序 中序 後序遍歷,葉子結點數,數的結點總數,交換左右子樹 include include include int cnt 結點宣告,資料域 左子樹 右子樹 typedef struct binode binode,bitree 建立二叉樹 void init bitree ...
二叉樹 四 二叉查詢樹 BST
二叉查詢樹 對於二叉查詢樹的任何乙個節點,設這個節點的值為k,這個節點的左子樹的任意乙個節點的值都小於k,右子樹的任何乙個節點的值都大於等於k。對於任何的二叉查詢樹,使用中序遍歷 左根右 可以將值從小到大列印出來。對於二叉查詢樹的檢索,例如圖a,需要檢索32,那麼首先需要檢索根節點,發現37大於32...
二叉樹(四) 二叉排序樹
二叉排序樹或者非空二叉樹,或者為具有以下性質的二叉樹 1 若根結點的左子樹不空,則左子樹上所有結點的值都小於根結點的值 2 若根結點的右子樹不空,則右子樹上所有結點的值都大於或者等於根結點的值 每一棵子樹分別也是二叉排序樹。上述定義為遞迴定義 如下圖 該二叉樹的中序序列如下 10,30,35,38,...