0
点赞
收藏
分享

微信扫一扫

数据结构【C语言版】二叉树的结构和遍历的实现

数据结构【C语言版】二叉树的结构和遍历的实现

1.二叉树的存储结构

二叉树一般分为两种存储结构,一种是顺序结构,一种是链表结构。

  1. 顺序结构

    //代码展示
    //二叉链
    typedef int BTDateType;
    
    typedef struct BinaryTreeNode
    {
    	BTDateType date;
    	struct BinaryTreeNode* left;//指向左孩子
    	struct BinartTreeNode* right;//指向右孩子
    }BTNode;
    //三叉链
    typedef struct BinaryTreeNode
    {
    	BTDateType date; //指向该节点的数据
    	struct BinaryTreeNode* parent;//指向该节点的双亲
    	struct BinaryTreeNode* left;//指向左孩子
    	struct BinaryTreeNode* right;//指向右孩子
    }BTNode;
    

    2.二叉树的遍历

    学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历 是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。

    二叉树的三大遍历

    1. 前序遍历前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。

    2. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。

    3. 后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。

      前序遍历:

      image-20220910115854843.png

      typedef int BTDateType;
      typedef struct BinaryTreeNode
      {
      	BTDateType date;
      	struct BinaryTreeNode* left;
      	struct BinartTreeNode* right;
      }BTNode;
      
      void PreOrder(BTNode* root)
      {
          if(root == NULL)
          {
              printf("NULL ");
              return;       
          } 
          printf("%d ",root->date);//先访问根
          PreOrder(root->left);//再访问左子树
          PreOrder(root->right);//最后访问右子树   
      }
      
      • 前序遍历的特点是第一个一定是根!

      中序遍历

      image-20220910121917911.png

      typedef int BTDateType;
      typedef struct BinaryTreeNode
      {
      	BTDateType date;
      	struct BinaryTreeNode* left;
      	struct BinartTreeNode* right;
      }BTNode;
      
      void InOrder(BTNode* root)
      {
          if (root == NULL)
          {
              printf("NULL ");
              return;
          }
          PreOrder(root->left);//先访问左子树
          printf("%d ", root->date);//再访问根
          PreOrder(root->right);//最后访问右子树   
      }
      
      • 中序遍历的特点是知道根的位置就可以判断出左右子树!

      后序遍历

      image-20220910155048669.png

      typedef int BTDateType;
      typedef struct BinaryTreeNode
      {
      	BTDateType date;
      	struct BinaryTreeNode* left;
      	struct BinartTreeNode* right;
      }BTNode;
      
      void PostOrder(BTNode* root)
      {
          if (root == NULL)
          {
              printf("NULL ");
              return;
          }
          PreOrder(root->left);//先访问左子树
          PreOrder(root->right);//然后访问右子树   
          printf("%d ", root->date);//最后访问根
      }
      
      
举报

相关推荐

0 条评论