木の定義
図ツリーは、階層関係を有するノードの有限集合からなるnはデータ構造(N> = 0)です。それは上向き、下向きや葉のルートであることを意味逆さまの木のように見えるので、私たちは「木」と呼んでいます。
typedef struct BTree //二叉树
{
int val;
struct BTree* rigth;
struct BTree* left;
}BTree, *BTreePtr;
ツリーの作成と破棄
再帰的アルゴリズムは、簡単にツリーを作成し、破壊することができます。
TreeNode* CreateTree()
{
int input = 0;
scanf_s("%d", &input);
TreeNode* t;
if (input != 0)
{
t = (TreeNode*)malloc(sizeof(TreeNode));
t->val = input;
printf("\n%d的左孩子:\n", t->val);
t->left = CreateTree();
printf("\n%d的有孩子:\n", t->val);
t->left = CreateTree();
}
else
{
return NULL;
}
return t;
}
void DestroyBTree(BTree* t)
{
if (!t)
return;
BTree* left = t->left;
BTree* rigth = t->rigth;
free(t);
t = NULL;
DestroyBTree(left);
DestroyBTree(rigth);
}
ツリーのトラバース
予約限定(予約限定)
ルート - >左の子 - >右の子。
void PreorderTraverseBTree(BTree* tree)
{
if (!tree)
return;
printf("%d\t", tree->val);
PreorderTraverseBTree(tree->left);
PreorderTraverseBTree(tree->rigth);
}
INORDERトラバーサル(INORDER)
左の子ノード - >ルート - >右の子
void inorderBTree(BTree* tree)
{
//递归出口
if (!tree)
return;
inorderBTree(tree->left);
printf("%d\t", tree->val);
inorderBTree(tree->rigth);
}
後順(後順)
左の子ノード - >右の子 - >ルート
void postorderBTree(BTree* tree)
{
if (!tree)
return;
postorderBTree(tree->left);
postorderBTree(tree->rigth);
printf("%d\t", tree->val);
}
参考文献Baiduの百科事典