二叉樹的相關操作(c語言)

2022-09-01 13:00:14 字數 4208 閱讀 8109

二叉樹的相關操作:包括先序序列+中序序列建樹丶後序序列+中序序列建樹丶層次序列+中序序列建樹;先序遍歷丶中序遍歷丶後序遍歷丶層次遍歷;二叉樹的深度及最大寬度;度分別為0,1,2的節點個數以及總結點個數

#include

#include

#include

#include

//二叉樹節點結構體

struct binarytreenode;

//二叉樹1中根序列

char midorder1[9]=;

//二叉樹1後根序列

char postorder1[9]=;

//二叉樹1層次序列

char cengorder1[9]=;

//二叉樹2先根序列

char preorder2[8]=;

//二叉樹2中根序列

char midorder2[8]=;

//二叉樹2後根序列

char postorder2[8]=;

//二叉樹2層次序列

char cengorder2[8]=;

//二叉樹3先根序列

char preorder3[9]=;

//二叉樹3中根序列

char midorder3[9]=;

//二叉樹3後根序列

char postorder3[9]=;

//二叉樹3層次序列

char cengorder3[9]=;

//先根序列+中根序列建樹1

printf("先根序列+中根序列建樹1\n");

binarytreenode* root1=construct1(preorder1,midorder1,8);

//先序遍歷樹1

printf("該二叉樹的先序遍歷為:");

preorderrecursion(root1);

printf("\n");

//中序遍歷樹1

printf("該二叉樹的中序遍歷為:");

midorderrecursion(root1);

printf("\n");

//後序遍歷樹1

printf("該二叉樹的後序遍歷為:");

postorderrecursion(root1);

printf("\n");

//層次遍歷樹1

printf("該二叉樹的層次遍歷為:");

breadthfirstorder(root1);

printf("\n");

//二叉樹1的深度

depth=bitreedepth(root1);

printf("該二叉樹的深度為%d\n",depth);

//二叉樹1的最大寬度

width=width(root1);

printf("該二叉樹的最大寬度為%d\n",width);

//二叉樹1度為0的節點個數

num0=nodenumber_0(root1);

printf("該二叉樹度為0的節點個數為%d\n",num0);

//二叉樹1度為1的節點個數

num1=nodenumber_1(root1);

printf("該二叉樹度為1的節點個數為%d\n",num1);

//二叉樹1度為2的節點個數

num2=nodenumber_2(root1);

printf("該二叉樹度為2的節點個數為%d\n",num2);

//二叉樹1總結點個數

sum=num0+num1+num2;

printf("該二叉樹度的總節點個數為%d\n",sum);

printf("\n");

//  後根序列+中根序列建樹2

printf("後根序列+中根序列建樹2\n");

binarytreenode* root2=construct2(postorder2,midorder2,7);

//先序遍歷樹2

printf("該二叉樹的先序遍歷為:");

preorderrecursion(root2);

printf("\n");

//中序遍歷樹2

printf("該二叉樹的中序遍歷為:");

midorderrecursion(root2);

printf("\n");

//後序遍歷樹2

printf("該二叉樹的後序遍歷為:");

postorderrecursion(root2);

printf("\n");

//層次遍歷樹2

printf("該二叉樹的層次遍歷為:");

breadthfirstorder(root2);

printf("\n");

//二叉樹2的深度

depth=bitreedepth(root2);

printf("該二叉樹的深度為%d\n",depth);

//二叉樹2的最大寬度

width=width(root2);

printf("該二叉樹的最大寬度為%d\n",width);

//二叉樹2度為0的節點個數

num0=nodenumber_0(root2);

printf("該二叉樹度為0的節點個數為%d\n",num0);

//二叉樹2度為1的節點個數

num1=nodenumber_1(root2);

printf("該二叉樹度為1的節點個數為%d\n",num1);

//二叉樹2度為2的節點個數

num2=nodenumber_2(root2);

printf("該二叉樹度為2的節點個數為%d\n",num2);

//二叉樹2總結點個數

sum=num0+num1+num2;

printf("該二叉樹度的總節點個數為%d\n",sum);

printf("\n");

//層次序列+中根序列建樹3

printf("層次序列+中根序列建樹3\n");

binarytreenode* root3;

root3=(binarytreenode*)malloc(sizeof(binarytreenode));

construct3(cengorder3,midorder3,root3);

//先序遍歷樹3

printf("該二叉樹的先序遍歷為:");

preorderrecursion(root3);

printf("\n");

//中序遍歷樹3

printf("該二叉樹的中序遍歷為:");

midorderrecursion(root3);

printf("\n");

//後序遍歷樹3

printf("該二叉樹的後序遍歷為:");

postorderrecursion(root3);

printf("\n");

//層次遍歷樹3

printf("該二叉樹的層次遍歷為:");

breadthfirstorder(root3);

printf("\n");

//二叉樹3的深度

depth=bitreedepth(root3);

printf("該二叉樹的深度為%d\n",depth);

//二叉樹3的最大寬度

width=width(root3);

printf("該二叉樹的最大寬度為%d\n",width);

//二叉樹3度為0的節點個數

num0=nodenumber_0(root3);

printf("該二叉樹度為0的節點個數為%d\n",num0);

//二叉樹3度為1的節點個數

num1=nodenumber_1(root3);

printf("該二叉樹度為1的節點個數為%d\n",num1);

//二叉樹3度為2的節點個數

num2=nodenumber_2(root3);

printf("該二叉樹度為2的節點個數為%d\n",num2);

//二叉樹3總結點個數

sum=num0+num1+num2;

printf("該二叉樹度的總節點個數為%d\n",sum);

return 0;

執行結果

二叉樹 二叉樹的相關操作

遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...

C 二叉樹相關操作

c 實現二叉樹的相關操作,包括遞迴和非遞迴方式。struct treenode 遍歷順序 根左右。遞迴方式 description 前序遍歷 遞迴 param root return void preorderrecur treenode root cout root val 前序遍歷當前結點 pr...

C 二叉樹的相關操作

include define maxsize 20 using namespace std typedef char telemtype 二叉樹的順序儲存表示 typedef struct sqbtree 二叉樹的二叉鍊錶表示 typedef struct node bitnode,bintree ...