vlambda博客
学习文章列表

【每日一题】如何进行二叉树的各种遍历的非递归算法实现?简要讲述。

进行二叉树的各种遍历的非递归算法实现



从当前节点开始遍历:(当入栈时访问节点内容,则为前序遍历;出栈时访问,则为中序遍 历)

若当前节点存在,就存入栈中,并访问左子树;

直到当前节点不存在,就出栈,并通过栈顶节点访问右子树;

不断重复 12,直到当前节点不存在且栈空。

只需要在入栈、出栈的时候,分别进行节点访问输出,即可分别得到前序、中序的非递归遍 历代码!从当前节点开始遍历:

若当前节点存在,就存入栈中,第一次访问,然后访问其左子树;

直到当前节点不存在,需要回退,这里有两种情况:

a) 从左子树回退,通过栈顶节点访问其右子树(取栈顶节点用,但不出栈)

b) 从右子树回退,这时需出栈,并取出栈节点做访问输出。(需要注意的是,输出完 毕需要置当前节点为空,以便继续回退。具体可参考代码中的 cur == null)

不断重复 12,直到当前节点不存在且栈空。



劝学警言

身处信息爆炸时代,知识浩瀚如海洋。

然,如同图书馆,你可以入门,但不代表你就拥有它。

且,学而不思则罔,思而不学则殆;

学贵有恒,更需注重方式方法。切记三字箴言:恒、慢、悟——

恒:坚持不懈!最忌讳的就是三天打鱼两天晒网,一曝十寒;

慢:精雕细琢!慢工出细活,理论知识一定要吃透,知其所以然;

悟:明辨慎思!要善于固化知识,一定要有自己的理解,否则就如同将他人吐在地上的吃过的甘蔗,再捡起来嚼,味同嚼蜡一般,无任何滋味可言。

送君一句话:殚精竭虑,不如须臾之所学也。

愿君,好好学习,天天向上!

共勉之!