链式二叉树的部分基础知识点

简介: 链式二叉树的部分基础知识点

1.二叉树的基本结构及其创建。

#include"stdio.h"
#include"stdlib.h"
typedef char  BTDataType;
typedef struct BinaryTreeNode{
    struct BinaryTreeNode*left;
    struct BinaryTreeNode*right;
    BTDataType data;
}BTNode;
BTNode *BuyNode(BTDataType x){
    BTNode*node=(BTNode*)malloc(sizeof(BTNode));
    if(node==NULL){
        printf("fail");
        exit(-1);
    }
    node->data=x;
    node->left=node->right=NULL;
    return node;
}
BTNode*CreatBinaryTree(){
    BTNode*nodeA=BuyNode('A');
    BTNode*nodeB=BuyNode('B');
    BTNode*nodeC=BuyNode('C');
    BTNode*nodeD=BuyNode('D');
    BTNode*nodeE=BuyNode('E');
    BTNode*nodeF=BuyNode('F');
    nodeA->left=nodeB;
    nodeA->right=nodeC;
    nodeB->left=nodeD;
    nodeC->left=nodeE;
    nodeC->right=nodeF;
    return nodeA;
}

2.堆的遍历

                    所有的遍历有着递归,也就是有着把一个大问题换成很多个小问题

                    (1)前序遍历(根->左子树->右子树)

                             先是由根到左子树到右子树 所以先是看A,A不是空后打印A,其实也就相当于打印根,然后左子树,左子树的根B,然后B的左子树根D左树为空,后右树为空,然后是返回B,B的右子树为空,然后返回A进去A的右子树,进入C的根,然后C进入左子树E,E的左右节点为空,然后进入右子树F最后两个空

打印出来后就是ABD NULL NULL C E NULL NULL F NULL NULL

//二叉树前序遍历
void PreOrder(BTNode*root){
    if(root==NULL){
        printf("NULL");
        return;
    }
    printf("%c",root->data);
    PreOrder(root->left);                        //递归A的左,也就是B再递归B的左,B的左是D也就是说目前是ABD再是NULL空后回到D,再走D的右
    PreOrder(root->right);
}

                  (2)中序遍历(左子树->根->右子树)

                                          先是由左子树到根到右子树,进去的是A进A左子树B,进B左子树D,D的左子树是返回NULL然后是返回D,进D的右子树返回NULL,回到B,也返回B,进B右树为NULL,进A 返回A,然后给C的左子树E然后返回左NULL,然后返回C,后再返 NULL,再到F的左子树NULL,再到F最后还是NULL

//二叉树中序遍历
void InOrder(BTNode*root){
    if(root==NULL){
        printf("NULL");
        return;
}
InOrder(root->left);
    printf("%c",root->data);
   InOrder(root->right);}

               (3)后序遍历(左子树->右子树->根)

          老套路,先进A的左子树B,再进B的左子树D,返回左右俩个为NULL,然后返回D,再返回B的右子树NULL,再返回B,然后进入右子树C,再去到E,E的左右是空,返回两个空,再到C的右节点F,返回两个NULL,再返回F,然后返回C,返回A

//二叉树后序遍历
void PostOrder(BTNode*root){
       if(root==NULL){
        printf("NULL");
    return;
}
    PostOrder(root->left);
    PostOrder(root->right);
printf("%c",root->data);
}

 


相关文章
|
3月前
|
DataX
二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)
二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)
39 0
|
9月前
|
存储 算法
链式二叉树的基本操作实现(建议收藏!!!)(2)
链式二叉树的基本操作实现(建议收藏!!!)
84 0
|
10月前
|
存储
链式二叉树(二叉树看这一篇就够了)
链式二叉树(二叉树看这一篇就够了)
43 0
|
2月前
|
存储 算法
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
22 0
|
2月前
|
存储 测试技术
【数据结构】手把手分析:链式二叉树的实现
【数据结构】手把手分析:链式二叉树的实现
26 5
|
2月前
|
算法
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
15 0
|
3月前
|
存储 算法 安全
数据结构与算法:链式二叉树
上一篇文章我们结束了二叉树的顺序存储,本届内容我们来到二叉树的链式存储!
数据结构与算法:链式二叉树
|
3月前
|
存储 算法
【链式二叉树】数据结构链式二叉树的(万字详解)
【链式二叉树】数据结构链式二叉树的(万字详解)
|
8月前
|
存储 算法 测试技术
一文带你搞懂二叉树
一文带你搞懂二叉树
|
9月前
链式二叉树的基本操作实现(建议收藏!!!)(3)
链式二叉树的基本操作实现(建议收藏!!!)
33 0