【資料結構】回顧二叉樹
1.為什麼會有樹?因為當有大量的輸入資料時,連結串列的線性訪問時間就顯得略長了。而樹結構,其大部分操作的執行時間平均為O(logN)。
2.樹的實現並不難,幾行程式碼就搞定了。
struct TreeNode
{
Object element;
TreeNode *firstChild;
TreeNode *nextSibling;
}
3.遍歷形式:
// 中序遍歷二叉樹
void inorder(tree_pointer ptr)
{
if(ptr)
{
inorder(ptr->left_child);
printf("%d",ptr->data);
inorder(ptr->right_child);
}
}
// 前序遍歷二叉樹
void preorder(tree_pointer ptr)
{
if(ptr)
{
printf("%d",ptr->data);
preorder(ptr->left_child);
preorder(ptr->right_child);
}
}
// 後序遍歷二叉樹
void postorder(tree_pointer ptr)
{
if(ptr)
{
postorder(ptr->left_child);
postorder(ptr->right_child);
printf("%d",ptr->data);
}
}
4.迭代的中序遍歷
void iter_inorder(tree_pointer node)
{
int top=-1;
tree_pointer stack[MAX_STACK_SIZE];
for(;;)
{
for(;node;node=node->left_child)
add(&top,node);
node=delete(&top);
if(!node)
break;
printf("%d",node->data);
node=node->right_child;
}
}
5.二叉樹的層序遍歷
void level_order(tree_pointer ptr)
{
int front=rear=0;
tree_pointer queue[MAX_QUEUE_SIZE];
if(!ptr)
return;
addq(front,&rear,ptr);
for(;;)
{
ptr=deleteq(&front,rear);
if(ptr)
{
printf("%d",ptr->data);
if(ptr->left_child)
addq(front,&rear,ptr->left_child);
if(ptr->right_child)
addq(front,&rear,ptr->right_child);
}
else
break;
}
}
6.二叉樹的複製
tree_pointer copy(tree_pointer original)
{
tree_pointer temp;
if(original)
{
temp=(tree_pointer) malloc(sizeof(node));
if(IS_FULL(temp))
{
fprintf(stderr,"The memory is full\n");
exit(1);
}
temp->left_child=copy(original->left_child);
tmep->right_child=copy(original->right_child);
temp->data=original->data;
return temp;
}
return NULL;
}
7.判斷二叉樹的等價性
int equal(tree_pointer first,tree_pointer second)
{
return ((!first&&!second)||(first && second && (first->data == second->data) &&
equal(first->left_child,second->left_child) &&
equal(first->right_child,second->right_child));
}
8.尋找結點的中序後繼
threaded_pointer insucc(threaded_pointer tree)
{
threaded_pointer temp;
temp=tree->right_child;
if(!tree->right_thread)
while(!temp->left_thread)
temp=temp->left_child;
return temp;
}
9.線索二叉樹的中序遍歷
void tinorder(threaded_pointer tree)
{
threaded_pointer temp=tree;
for(;;)
{
temp=insucc(temp);
if(temp==tree)
break;
printf("%3c",temp->data);
}
}
10.線索二叉樹的右插入操作
void insert_right(threaded_pointer parent,threaded_pointer child)
{
threaded_pointer temp;
child->right_child=parent->right_child;
child->right_thread=parent->right_thread;
child->left_child=parent;
child->left_thread=TRUE;
parent->right_child=child;
parent->right_thread=FALSE;
if(!child->right_thread)
{
temp=insucc(child);
temp->left_child=child;
}
}
感謝您的訪問,希望對您有所幫助。
歡迎大家關注或收藏、評論或點贊。
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- 資料結構(樹):二叉樹資料結構二叉樹
- 資料結構-二叉樹資料結構二叉樹
- 資料結構 - 二叉樹資料結構二叉樹
- 【資料結構】二叉樹!!!資料結構二叉樹
- 【資料結構】回顧表ADT資料結構
- 資料結構-平衡二叉樹資料結構二叉樹
- 資料結構之「二叉樹」資料結構二叉樹
- 資料結構——平衡二叉樹資料結構二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 【資料結構】回顧表、棧、佇列資料結構佇列
- 資料結構——二叉樹進階資料結構二叉樹
- 資料結構-二叉搜尋樹資料結構
- 資料結構 二叉樹遍歷資料結構二叉樹
- 【資料結構】二叉搜尋樹!!!資料結構
- 資料結構分析之二叉樹資料結構二叉樹
- 【資料結構】二叉樹(c++)資料結構二叉樹C++
- 資料結構二叉樹學習資料結構二叉樹
- 資料結構-二叉樹、堆、圖資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 重學資料結構之樹和二叉樹資料結構二叉樹
- 重學資料結構(六、樹和二叉樹)資料結構二叉樹
- [資料結構] 樹、二叉樹、森林的轉換資料結構二叉樹
- 【資料結構】回顧優先佇列(堆)資料結構佇列
- 資料結構之「二叉搜尋樹」資料結構
- 資料結構☞二叉搜尋樹BST資料結構
- 資料結構之二叉樹的建立資料結構二叉樹
- 資料結構之遍歷二叉樹資料結構二叉樹
- 【資料結構】建立二叉樹的方法資料結構二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 資料結構 其五 樹與二叉樹學習總結資料結構二叉樹
- 【資料結構導論之樹和二叉樹總結篇】資料結構二叉樹
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 經典資料結構和演算法回顧資料結構演算法
- 【資料結構與演算法】二叉樹資料結構演算法二叉樹
- 常用資料結構之線索二叉樹資料結構二叉樹
- 資料結構和演算法:二叉樹資料結構演算法二叉樹
- 資料結構之線索化二叉樹資料結構二叉樹
- 【資料結構】二叉樹的線索化!!資料結構二叉樹