日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【c语言数据结构】二叉树

發(fā)布時間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c语言数据结构】二叉树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

c語言數(shù)據(jù)結構完全二叉樹

快速開始

直接參考示例代碼即可

介紹

概念

二叉樹(Binary tree)是樹形結構的一個重要類型。

許多實際問題抽象出來的數(shù)據(jù)結構往往是二叉樹形式,即使是一般的樹也能簡單地轉換為二叉樹,

二叉樹的存儲結構及其算法都較為簡單。

二叉樹特點是每個結點最多只能有兩棵子樹,且有左右之分。

類型

基本類型描述
空二叉樹(NULL)
二叉樹根只有一個節(jié)點的二叉樹
左樹每個結點只有左子節(jié)點的樹(鏈表)
右樹每個節(jié)點只有右子節(jié)點的樹
完全二叉樹每個深度都是滿節(jié)點的二叉樹

示例代碼:建立二叉樹

介紹

  • 該示例代碼介紹了一個完全二叉樹的建立,以及前序遍歷,中序遍歷和后序遍歷的索引結果。(源代碼完成了命名自注釋,不再贅述)

  • 頭文件建立了一個DH_ibtree的二叉樹類型,核心數(shù)據(jù)是data,核心接口是data_info

代碼結構

代碼結構: - ./|-- DH_btree.h-- DH_basic_btree.c

DH_btree.h

/** copyright DH.*/#ifndef DH_BTREE #define DH_BTREE/* 標識,說明該參數(shù)是入?yún)⑦€是出參 */ #define IN #define OUT #define INOUT /* 數(shù)據(jù)結構為整型的基本二叉樹示例 */ typedef struct _DH_ibtree {int data;int deep;void (*data_info)(int data);struct _DH_ibtree *left;struct _DH_ibtree *right; } DH_ibtree;#endif

DH_basic_btree.c

#include <stdio.h> #include <stdlib.h> #include "DH_btree.h"static void logDataInfo(int data) {printf("[當前節(jié)點信息] 節(jié)點數(shù)據(jù) = %d\n", data); }/* 利用前序遍歷完成二叉樹構建 */ static void preOrderSetUp(IN int *tree_arr, IN int arr_len,INOUT DH_ibtree *father_node,IN int father_node_index) {if (father_node == NULL) {return;}if (father_node_index > arr_len) {return;}if (father_node_index * 2 > arr_len) {return;}father_node->left = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));father_node->left->data = tree_arr[father_node_index * 2 -1];father_node->left->data_info = logDataInfo;// printf("%d\n", tree_arr[father_node_index * 2 -1]);preOrderSetUp(tree_arr, arr_len, father_node->left, father_node_index * 2);father_node->right = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));father_node->right->data = tree_arr[father_node_index * 2];father_node->right->data_info = logDataInfo;// printf("%d\n", tree_arr[father_node_index * 2]);preOrderSetUp(tree_arr, arr_len, father_node->right, father_node_index * 2 + 1); }/** 功能:前序遍歷初始化一個二叉樹* 輸入:原始二叉樹數(shù)組,二叉樹數(shù)組大小* 輸出:無* 返回:初始化的二叉樹*/ DH_ibtree *DH_ibtree_init(IN int *tree_arr, IN int arr_len) {DH_ibtree *new_tree = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));new_tree->data = tree_arr[0];new_tree->data_info = logDataInfo;preOrderSetUp(tree_arr, arr_len, new_tree, 1);return new_tree; }/** 功能:二叉樹前序遍歷****/ void DH_ibtree_preOrderLoop(IN DH_ibtree *node) {if (!node) {return;}node->data_info(node->data);DH_ibtree_preOrderLoop(node->left);DH_ibtree_preOrderLoop(node->right); }/** 功能:二叉樹中序遍歷****/ void DH_ibtree_inOrderLoop(IN DH_ibtree *node) {if (!node) {return;}DH_ibtree_inOrderLoop(node->left);node->data_info(node->data);DH_ibtree_inOrderLoop(node->right); }/** 功能:二叉樹后序遍歷****/ void DH_ibtree_postOrderLoop(IN DH_ibtree *node) {if (!node) {return;}DH_ibtree_postOrderLoop(node->left);DH_ibtree_postOrderLoop(node->right);node->data_info(node->data); }int main(void) {int arr[7] = {1, 2, 3, 4, 5, 6, 7};int arr_num = 7;DH_ibtree *tree = DH_ibtree_init(arr, arr_num);printf("preOrderLoop start\n");DH_ibtree_preOrderLoop(tree);printf("inOrderLoop start\n");DH_ibtree_inOrderLoop(tree);printf("postOrderLoop start\n");DH_ibtree_postOrderLoop(tree);}

總結

以上是生活随笔為你收集整理的【c语言数据结构】二叉树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。