演算法(四) 二叉樹操作

2021-09-25 01:53:53 字數 1602 閱讀 2321

二叉樹的定義:

二叉樹是一種樹形結構:

特點是與每個節點關聯的子節點至多有兩個(可為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,...