数据结构(八)二叉树遍历

数据结构(八)二叉树遍历_第1张图片

数据结构(八)二叉树遍历_第2张图片

示例1

二叉树是一种树形结构,遍历就是要让树中的所有节点被且仅被访问一次,即按一定规律排列成一个线性队列。二叉(子)树是一种递归定义的结构,包含三个部分:根结点(N)、左子树(L)、右子树(R)。根据这三个部分的访问次序对二叉树的遍历进行分类,总共有6种遍历方案:NLR、LNR、LRN、NRL、RNL和LNR。研究二叉树的遍历就是研究这6种具体的遍历方案,显然根据简单的对称性,左子树和右子树的遍历可互换,即NLR与NRL、LNR与RNL、LRN与RLN,分别相类似,因而只需研究NLR、LNR和LRN三种即可,分别称为“先序遍历”、“中序遍历”和“后序遍历”。

数据结构(八)二叉树遍历_第3张图片
各种形式遍历输出的结果为:

            先序:ABCDEGF

            中序:CBEGDFA

            后序:CGEFDBA

代码

int main(int argc, char* argv[])
{
    BiTreeNode *proot=NULL;
    printf("InOrder input chars to create a BiTree: ");
    proot=createBiTreePreOrder();  //输入(ABC DE G F )
    printf("PreOrder Output the BiTree recursively: ");
    traverseBiTreePreOrder(proot,putchar);
    printf("\n");
    printf("PreOrder Output the BiTree non-recursively: ");
    traverseBiTreePreOrder2(proot,putchar);
    printf("\n");
    printf("InOrder Output the BiTree recursively: ");
    traverseBiTreeInOrder(proot,putchar);
    printf("\n");
    printf("InOrder Output the BiTree non-recursively(1): ");
    traverseBiTreeInOrder2(proot,putchar);
    printf("\n");
    printf("InOrder Output the BiTree non-recursively(2): ");
    traverseBiTreeInOrder3(proot,putchar);
    printf("\n");
    printf("PostOrder Output the BiTree non-recursively: ");
    traverseBiTreePostOrder(proot,putchar);
    printf("\n");
    printf("PostOrder Output the BiTree recursively: ");
    traverseBiTreePostOrder2(proot,putchar);
    printf("\n");
    return 0;
}

你可能感兴趣的:(数据结构,递归,二叉树,遍历,结构)