APP下载

递归思想在二叉树遍历中的应用

2018-12-18李萍

电脑知识与技术 2018年27期
关键词:迭代

李萍

摘要:递归是程序设计中简化复杂问题的一种有力工具,可以将一个大的问题分解成同种类型小问题的迭代。该文介绍了递归的核心与特点,并以二叉树的遍历实现了递归的过程。

关键词:递归;二叉树遍历;迭代

中图分类号:TP18;TP301.6 文献标识码:A 文章编号:1009-3044(2018)27-0039-02

Application of Recursion on Traversing the Binary Tree

LI Ping

(Department of Mathematics and Information Technology, Yuncheng University, Yuncheng 044000, China)

Abstract:Recursion is a powerful tool for simplifying comples problems in program design. It can decompose a large problem into some problems of the same type.The article introduces the core and feature of recursion and implements the recursive process by traversing the binary tree.

Key words: Recursion; the traversion of binary tree; iterate

1 递归算法的描述

在一个函数的定义中直接或间接调用自身就称为函数的递归,该算法的本质体现了“以此类推”“用同样的步骤重复”这样的思想,可以用简单的程序来解决某些复杂的计算问题,但是运算量较大。以下为n的阶乘经典的递归算法描述递归程序的核心。

2 二叉树遍历算法

一棵非空二叉树是由树根和分别称为左右子树的二叉树构成,由二叉树的定义可知存在递归的思想。所以在编写与二叉树相关的算法时,要谨记递归。例:求二叉树结点的个数。

Int num(BTtree T)

{int leftnum,rightnum;

if(T==NULL) return 0;//递减到空树,不能再减二叉树的结点个数为0个

Else

Leftnum=num(T→lchild);//递减,以同样的方式求左子树结点个数

Rightnum=num(T→rchild);//递减,以同样的方式求右子树结点个数

Return leftnum+rightnum+1;}返回左右子树结点个数+根结点的1

递归求二叉树结点个数的递归函数调用过程如图1所示:

3 二叉树先序遍历非递归算法

非递归遍历的基本思想如下:

(1) 根结点进栈

(2) 结点出栈,被访问

(3) 结点的右,左孩子(非空)进栈

(4) 反复执行2,3步,至栈为空

算法描述如下:

void NLR(BiTree T)

{initstac(s);// 初始化一个栈

BiTNode *p; p=T;

if(T==NULL) print(“it is NULL”);

else {

push(s,p);

while(!Stackempty(s))

{p=&pop;(s);

printf(“%d”,p→data);

if(p→rchild!=NULL) push(s,p→rchild);

if(p→lchild!=NULL) push(s,p→lchild);}}

}

4 总结

递归求解問题的方式简化了程序设计,结构清晰,易于理解。但是每执行一次递归函数需要额外增加存储空间。在不考虑空间的前提下应用于二叉树遍历,掌握递归的核心,提高程序的可读性。

参考文献:

[1] 黄艳峰,陈伟.递归问题的Java实现[J].电脑知识与技术,2017(7):27-28.

[2] 张建波.一种将递归过程转换为非递归过程的方法研究[J].计算机教育,2017(8):20-21.

[3] 朱朝霞.递归对自顶向下语法分析的影响[J].电脑知识与技术,2018(2):146-147.

[4] 周法国.基于递归的程序设计浅析[J].天津科技,2017(6):20-21.

[5] 王军.基于一道二叉树习题的教学案例辨析[J].福建电脑,2017(5):8-10.

[6] 卓明敏,卓文.非递归后序遍历二叉树二址栈法[J].福建电脑,2017(10):3-5.

[通联编辑:代影]

猜你喜欢

迭代
中间件“迭代”
一种用于室内定位的线性规划算法
DNS解析的探究
涨价与医保政策需同步“迭代”