資料結構 樹的基本操練 9

2021-09-11 22:24:13 字數 3950 閱讀 1973

例:編寫遞迴演算法,計算二叉樹中葉子結點的數目。

思路:輸出葉子結點比較簡單,用任何一種遍歷演算法,凡是左右指標均空者,則為葉子,將其統計並列印出來。

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...