例:編寫遞迴演算法,計算二叉樹中葉子結點的數目。
思路:輸出葉子結點比較簡單,用任何一種遍歷演算法,凡是左右指標均空者,則為葉子,將其統計並列印出來。
dlr_countleafnum(node *root)//採用中序遍歷的遞迴演算法
dlr_countleafnum(root->lchild); //遞迴遍歷左子樹,直到葉子處;
dlr_countleafnum(root->rchild);}//遞迴遍歷右子樹,直到葉子處;
} return(0);
}
(1)
#include#include#include/*
typedef struct bitnode
bitnode,*bitree;
*///二叉鏈表示法
struct bitnode
bitnode, *bitree;
typedef struct bitnode bitnode;
typedef struct bitnode *bitree;
void preorder(bitnode* root)
printf("%d", root->data);
//遍歷左子樹
preorder(root->lchild);
//遍歷右子樹
preorder(root->rchild);
}void inorder(bitnode* root)
//遍歷左子樹
inorder(root->lchild);
printf("%d", root->data);
//遍歷右子樹
inorder(root->rchild);
}void postorder(bitnode* root)
int sum;
void coutleaf(bitnode* t)
if (t->lchild)
if (t->rchild)
}}void main()
(2)多執行緒存在資源競爭時
#include#include#include/*
typedef struct bitnode
bitnode,*bitree;
*///二叉鏈表示法
struct bitnode
bitnode, *bitree;
typedef struct bitnode bitnode;
typedef struct bitnode *bitree;
void preorder(bitnode* root)
printf("%d", root->data);
//遍歷左子樹
preorder(root->lchild);
//遍歷右子樹
preorder(root->rchild);
}void inorder(bitnode* root)
//遍歷左子樹
inorder(root->lchild);
printf("%d", root->data);
//遍歷右子樹
inorder(root->rchild);
}void postorder(bitnode* root)
/*int sum;
void coutleaf1(bitnode* t)
if (t->lchild)
if (t->rchild)
}}*/
//當存在全域性變數,多執行緒進行資源競爭時
void coutleaf(bitnode* t,int* sum)
if (t->lchild)
if (t->rchild)
}}void main()
/* //樹的遍歷
printf("preorder\n");
preorder(&t1);
printf("inorder\n");
inorder(&t1);
printf("postorder\n");
postorder(&t1);
*/ return;
}
#include #include #include /*
typedef struct bitnode
bitnode, *bitree;
*///二叉鏈表示法
struct bitnode
;typedef struct bitnode bitnode;
typedef struct bitnode* bitree;
void inorder(bitnode *root)
//遍歷左子樹
inorder(root->lchild);
printf("%d ", root->data);
//遍歷右子樹
inorder(root->rchild);
}int depth(bitnode *t)
//求左子樹的高度
deptleft = depth(t->lchild);
//求右子樹的高度
deptright = depth(t->rchild);
//+1
deptval = 1 + (deptleft>deptright ? deptleft : deptright);
return deptval;
}void main()
#include #include #include /*
typedef struct bitnode
bitnode, *bitree;
*///二叉鏈表示法
struct bitnode
;typedef struct bitnode bitnode;
typedef struct bitnode* bitree;
void inorder(bitnode *root)
//遍歷左子樹
inorder(root->lchild);
printf("%d ", root->data);
//遍歷右子樹
inorder(root->rchild);
}int depth(bitnode *t)
//求左子樹的高度
deptleft = depth(t->lchild);
//求右子樹的高度
deptright = depth(t->rchild);
//+1
deptval = 1 + (deptleft>deptright ? deptleft:deptright);
return deptval;
}bitnode * copytree(bitnode *t)
//copy左子樹
if (t->lchild != null)
else
//copy右子樹
if (t->rchild != null)
else
//malloc根節點
newnode = (bitnode *)malloc(sizeof(bitnode));
if (newnode == null)
newnode->lchild = newlp;
newnode->rchild = newrp;
newnode->data = t->data;
return newnode;
}void main()
printf("\nolder inorder\n");
inorder(&t1);
printf("hello...\n");
system("pause");
return ;
}
資料結構樹的基本操作 資料結構 樹的基本操作
include include include gtree.h include linklist.h typedefstruct tag gtreenode gtreenode 樹的節點 struct tag gtreenode gtreedata data 節點自身資料 gtreenode par...
資料結構 樹的基本認識
前言 一 樹的定義及基本術語 1.樹的定義 2.基本術語 3.樹的性質 二 樹的表示 儲存結構 樹形結構是一類重要的非線性結構。樹形結構是結點之間有分支,並且具有層次關係的結構,類似於大自然中的樹。樹是一種非線性的資料結構,它是由n n 0 個有限結點組成乙個具有層次關係的集合。把它叫做樹是因 為它...
資料結構樹基本操作
本章內容 樹的結構定義 遞迴的三種遍歷 非遞迴的三種遍歷 層次遍歷 求深度 求特定結點以及測試的主函式。include include define maxsize 50 二叉樹的鏈式儲存 typedef struct btnode btnode,tree 訪問改結點數值 void visit tr...