二叉树之前序遍历(递归思想)
前序遍历顺序的理解
二叉树是一种递归定义的数据结构,遍历二叉树是学习这种数据结构首先要理解的一个基本操作。其原理是递归思想,首先把代码放出来:
1 void PreOrder(BiTree T){ 2 if(T != NULL){ 3 printf("%c ",T->data); 4 //访问左子结点 5 PreOrder(T->lchild); 6 //访问右子结点 7 PreOrder(T->rchild); 8 } 9 }
接下来我们逐步分析前序遍历时的递归过程:
首先我们来到根节点A,自身调用递归后访问其左节点B。
访问B时子节点B自身又调用了一次递归访问B的左节点D。
访问D后子节点D再次自身调用一次递归访问D的左节点,因为D的左节点为NULL,故停止D的左节点自身调用递归(D的左节点访问完)。
接着进行下一步,访问D的右节点F。
访问子节点F后因其左右节点均为NULL,所以F的左右节点都访问完毕,即D的右节点也访问完毕。
然后退回到子节点D的上一步节点B,因为节点D即节点B的左节点已经访问完,所以接下来访问B的右节点E。
访问E后也因其左右节点均为NULL,所以E的左右节点也都访问完毕(即节点E访问完毕,即B的右节点访问完毕)。
然后退回到E的上一节点B,此时B的左右节点也已经访问完,故退回到B的上一节点A。
因为A的左节点B已经访问完毕,所以此时开始访问A的右节点C……后面的步骤参考以上内容。
综上,二叉树前序遍历完成后输出顺序为:ABDFECGH
谢谢观看,如有问题欢迎提出并指正。