二叉树由3个基本单元组成:根结点,左子树和右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。假如以L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可有DLR、LDR、LRD、DRL、RDL、RLD这6种方案。若限定先左后右,则只有前3种情况,分别称之为先(根)序遍历、中(根)序遍历和后(根)序遍历。
首先我们来建立一个二叉树,采取的是链式存储结构
typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; void CreteBiTree(BiTree *T) { char c; scanf("%c",&c); if (' ' == c) { *T = NULL; }else{ *T = (BiTNode *)malloc(sizeof(BiTNode)); (*T)->data = c; CreteBiTree(&(*T)->lchild); CreteBiTree(&(*T)->rchild); } }
默认是以先序遍历的方式插入结点,空格为结束标志
//遍历二叉树 //____前序遍历 void PreOrderTraverse(BiTree T, int level) { if (T != NULL) { visit(T->data,level); PreOrderTraverse(T->lchild, level+1); PreOrderTraverse(T->rchild, level+1); } }代码地址:https://github.com/chanbendong/DataStructure/blob/master/BiTree.c