资讯详情

二叉树的前、中、后序遍历

所谓二叉树遍历,就是按照一定的规则依次操作二叉树中的节点,每个节点只操作一次。访问结点的操作取决于具体的应用问题。 遍历是二叉树最重要的运算之一,也是二叉树其他运算的基础。

二叉树的遍历包括:前序/中序/后序的递归结构遍历:

1. 前序遍历(先根遍历)-访问根结点的操作发生在遍历其左右子树之前(根->左子树->右子树)。

2. 中序遍历(中根遍历)-访问根结点的操作发生在左右子树(左子树)->根->右子树)。

3. 后续遍历(后根遍历)-访问根结点的操作发生在左右子树(左子树->右子树->根)。

因为被访问的结点必须是某子树的根,N(Node)、L(Left subtree)和R(Right subtree)左子树和右子树也可以解释为根和根。NLR、LNR和LRN又称先根遍历、中根遍历和后根遍历。

以下图为例,前、中、后序遍历

首先实现上图所示的二叉树

typedef int BTDataType; typedef struct BinaryTreeNode {  BTDataType _data;  struct BinaryTreeNode* _left;  struct BinaryTreeNode* _right; }BTNode; BTNode* BuyNode(BTDataType x) {  BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));  if (newnode == NULL) {   perror("BTNode::mallc");   return(-1);  }  newnode->_data = x;  newnode->_left = newnode->_right = NULL;  return newnode; } BTNode* CreatBinaryTree() {  BTNode* A = BuyNode('A');  BTNode* B = BuyNode('B');  BTNode* C = BuyNode('C');  BTNode* D = BuyNode('D');  BTNode* E = BuyNode('E');  BTNode* F = BuyNode('F');   A->_left = B;  A->_right = C;  B->_left = D;  C->_left = E;  C->_right = F;  return A; }

void PreOrder(BTNode* root) {  if (root == NULL) {   return;  }  printf("%c ", root->_data);  PreOrder(root->_left);  PreOrder(root->_right); }

如下图所示

中序遍历、后序遍历和前序遍历递归调用过程相似,不画图,下面分别给出相应的代码。

void InOrder(BTNode* root) {  if (root == NULL) {   return;  }  InOrder(root->_left);  printf("%c ", root->_data);  InOrder(root->_right); }

void PostOrder(BTNode* root) {  if (root == NULL) {   return;  }  PostOrder(root->_left);  PostOrder(root->_right);  printf("%c ", root->_data); }

前序遍历结果:A B D C E F

中序遍历结果:D B A E C F

后序遍历结果:D B E F C A

标签: 螺栓二极管nlr506xxld

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台