樹的基本概念:
樹具有遞歸性,非線性
完全二叉樹 :所有節點都在
舉例:
遞歸遍歷二叉樹:
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include<string.h>
typedef struct BinaryNode {
char ch;
struct BinaryNode* lchild;
struct BinaryNode* rchild;
}binarynode;
//遞歸遍歷
void Recursion(binarynode* root) {
if (root == NULL) {
return;
}
//遍歷左子樹
Recursion(root->lchild);
//遍歷右子樹
Recursion(root->rchild);
//先訪問根節點
printf("%c", root->ch);
}
void CreatBinaryTree() {
binarynode node1 = { 'A',NULL,NULL };
binarynode node2 = { 'B',NULL,NULL };
binarynode node3 = { 'C',NULL,NULL };
binarynode node4 = { 'D',NULL,NULL };
binarynode node5 = { 'E',NULL,NULL };
binarynode node6 = { 'F',NULL,NULL };
binarynode node7 = { 'G',NULL,NULL };
binarynode node8 = { 'H',NULL,NULL };
// binarynode node9 = { 'I',NULL,NULL };
//建立節點關係
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
//先序遍歷
Recursion(&node1);
}
int main()
{
CreatBinaryTree();
printf("\n");
system("pause");
return 0
}
求葉子節點數:(葉子節點概念,無左孩子和右孩子)
// 求葉子節點數目
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include<string.h>
typedef struct BinaryNode {
char ch;
struct BinaryNode* lchild;
struct BinaryNode* rchild;
}binarynode;
void Recursion(binarynode* root) {
if (root == NULL) {
return;
}
printf("%c", root->ch);
Recursion(root->lchild);
Recursion(root->rchild);
}
binarynode* CopyBonaryTree(binarynode* root) {
if (root == NULL) {
return NULL;
}
binarynode* lchild = CopyBonaryTree(root->lchild);
binarynode* rchild = CopyBonaryTree(root->rchild);
binarynode* newnode = (binarynode*)malloc(sizeof(binarynode));
newnode->ch = root->ch;
newnode->lchild = lchild;
newnode->rchild = rchild;
return newnode;
}
void Free_binaryTree(binarynode* root) {
if (root != NULL) {
return;
}
Free_binaryTree(root->lchild);
Free_binaryTree(root->rchild);
Free_binaryTree(root);
}
void CreatBinaryTree() {
binarynode node1 = { 'A',NULL,NULL };
binarynode node2 = { 'B',NULL,NULL };
binarynode node3 = { 'C',NULL,NULL };
binarynode node4 = { 'D',NULL,NULL };
binarynode node5 = { 'E',NULL,NULL };
binarynode node6 = { 'F',NULL,NULL };
binarynode node7 = { 'G',NULL,NULL };
binarynode node8 = { 'H',NULL,NULL };
// binarynode node9 = { 'I',NULL,NULL };
//建立節點關係
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
binarynode* root = CopyBonaryTree(&node1);
Recursion(root);
Free_binaryTree(root);
}
int main()
{
CreatBinaryTree();
printf("\n");
system("pause");
return 0;
}