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

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

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);
}

 


相关文章
|
7月前
|
DataX
二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)
二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)
57 0
【初阶数据结构】二叉树链式结构的实现和遍历
在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。
|
存储 算法
链式二叉树的基本操作实现(建议收藏!!!)(2)
链式二叉树的基本操作实现(建议收藏!!!)
107 0
|
存储
链式二叉树(二叉树看这一篇就够了)
链式二叉树(二叉树看这一篇就够了)
66 0
|
4月前
|
存储 测试技术
【初阶数据结构篇】实现链式结构二叉树(二叉链)上篇
先构建根结点,再对左右子树构建,每次需要时申请一个结点空间即可,否则返回空指针。
37 0
|
4月前
|
存储
【初阶数据结构篇】实现链式结构二叉树(二叉链)下篇
要改变root指针的指向,将本来指向根节点的root指针改为空,所以传二级指针(一级指针也可以,只不过在调用完记得把root置为空)。
35 0
|
6月前
|
存储 测试技术
【数据结构】手把手分析:链式二叉树的实现
【数据结构】手把手分析:链式二叉树的实现
45 5
|
6月前
|
存储 测试技术
【数据结构】最最基础的链式结构——单链表,还不会你就吃大亏了!
【数据结构】最最基础的链式结构——单链表,还不会你就吃大亏了!
65 5
|
6月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
133 7
|
7月前
|
存储 算法 安全
数据结构与算法:链式二叉树
上一篇文章我们结束了二叉树的顺序存储,本届内容我们来到二叉树的链式存储!
数据结构与算法:链式二叉树