当前位置:   article > 正文

二叉树链式结构之二叉链_二叉树左右链接是什么

二叉树左右链接是什么

二叉链

二叉链是链式结构的一种用链表来表示一棵二叉树,即用链来指示元素的逻辑关系,链表中每个结点由三个域组成,数据域和左右指针域,左指针指向该节点的左孩子,右指针指向该节点的右孩子。

  1. typedef int BTDataType;
  2. typedef struct BinaryTreeNode
  3. {
  4. BTDataType data; //数据域
  5. struct BinaryTreeNode* left; //指向左孩子
  6. struct BinaryTreeNode* right; //指向右孩子
  7. }BTNode;

二叉树的遍历

所谓二叉树遍历是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。

二叉树的遍历有以下4种方式

前序遍历:先遍历根、在遍历左子树、最后在遍历右子树

  1. // 二叉树前序遍历: 根、左子树、右子树
  2. void PreOrder(BTNode* root)
  3. {
  4. if (root == NULL)
  5. {
  6. printf("NULL ");
  7. return;
  8. }
  9. printf("%d ", root->data);
  10. PreOrder(root->left);
  11. PreOrder(root->right);
  12. }

中序遍历:先遍历左子树、在遍历根、最后在遍历右子树

  1. // 二叉树中序遍历: 左子树、根、右子树
  2. void InOrder(BTNode* root)
  3. {
  4. if (root == NULL)
  5. {
  6. printf("NULL ");
  7. return;
  8. }
  9. InOrder(root->left);
  10. printf("%d ", root->data);
  11. InOrder(root->right);
  12. }

后序遍历:先遍历左子树、在遍历右子树、最后在遍历根

  1. // 二叉树后序遍历: 左子树、右子树、根
  2. void PostOrder(BTNode* root)
  3. {
  4. if (root == NULL)
  5. {
  6. printf("NULL ");
  7. return;
  8. }
  9. PostOrder(root->left);
  10. PostOrder(root->right);
  11. printf("%d ", root->data);
  12. }

层序遍历:一层一层的遍历

  1. / 层序遍历 --- 队列实现
  2. //先入根节点,在出根结点,如果根节点的左右子树都不为空就入队列
  3. void LevelOrder(BTNode* root)
  4. {
  5. Queue q;
  6. QueueInit(&q);
  7. //将根节点入队列
  8. if (root != NULL)
  9. {
  10. QueuePush(&q, root);
  11. }
  12. while (!QueueEmpty(&q))
  13. {
  14. BTNode* front = QueueFront(&q);
  15. QueuePop(&q);
  16. //出层序数据
  17. printf("%d ", front->data);
  18. //左右子树判空
  19. if (front->left != NULL)
  20. {
  21. QueuePush(&q, front->left);
  22. }
  23. if (front->right != NULL)
  24. {
  25. QueuePush(&q, front->right);
  26. }
  27. }
  28. QueueDestroy(&q);
  29. }

用队列来实现:先入根节点,在出根节点,如果左子树不为空就入队列,如果右子树不为空就入队列,之后在出队头,循环往复直到队列为空

其它接口

二叉树其他接口的实现

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号