【C++】【十】二叉樹

樹的基本概念:

樹具有遞歸性,非線性

 

 

完全二叉樹  :所有節點都在

 

 

 

 

 

舉例:

遞歸遍歷二叉樹:

#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;

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章