博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的非递归遍历
阅读量:4154 次
发布时间:2019-05-25

本文共 1883 字,大约阅读时间需要 6 分钟。

有些程序,不动手写,就不知道自己不会。

前序和中序这里实现的有些问题,还是看北大的算法教程靠谱。不过,这里的后序还是不错的

前序遍历

static void PreOrderTraverse(BinaryTreeNode root){    BinaryTreeNode temp = root.left;    Stack
stack = new Stack
(); Console.WriteLine(root.data); stack.Push(root); while (stack.Count > 0 || temp != null) { while (temp != null) { Console.WriteLine(temp.data); stack.Push(temp);//要把当前的节点放入栈中,以备回溯到这个节点时,取其右孩子 temp = temp.left; } temp = stack.Pop(); temp = temp.right; }}

中序遍历

static void InOrderTraverse2(BinaryTreeNode root){    BinaryTreeNode temp = root.left;    Stack
stack = new Stack
(); stack.Push(root); while (stack.Count > 0 || temp != null) { while (temp != null) { stack.Push(temp); temp = temp.left; } temp = stack.Pop(); Console.WriteLine(temp.data); temp = temp.right; }}

后序遍历比较麻烦,当前节点的左孩子还是右孩子的处理方法不一样。先处理左子树,再处理右子树,最后处理当前节点,但是当处理当前节点的时候如何判断是从左子树返回的还是从右子树返回的呢?这就需要当前节点curr的前一个节点pre。

static void PostOrderTraversa2(BinaryTreeNode root){    Stack
stack = new Stack
(); stack.Push(root); BinaryTreeNode prev = null; BinaryTreeNode curr = null; while (stack.Count > 0) { curr = stack.Peek(); if (prev == null || prev.left == curr || prev.right == curr)//节点在漫游 { if (curr.left != null) stack.Push(curr.left); else if (curr.right != null) stack.Push(curr.right); } else if (curr.left == prev)//下面的都是节点开始回溯 { if (curr.right != null) stack.Push(curr.right); } else//当是叶子节点(prev == curr)或者prev节点是curr的右子树的时候(curr.right == prev) { Console.WriteLine(curr.data); stack.Pop(); } prev = curr; }}

转载地址:http://ppeti.baihongyu.com/

你可能感兴趣的文章
图形学实验一:bresenham算法 画线和画圆
查看>>
codeblocks配置GLUT
查看>>
矩阵卷积、矩阵相乘的转化
查看>>
图形学实验二:画个火柴人
查看>>
openGL光照(illumination)
查看>>
C++重载,重写,重定义
查看>>
全排列生成算法之字典序
查看>>
在CodeBlocks中使用openGL
查看>>
CodeBlocks配置openGL遇到的一些问题
查看>>
图形学实验三:Texture Mapping
查看>>
安卓环境搭建及虚拟机genymotion使用
查看>>
Github学习
查看>>
可视化实验一:Echars的初步使用
查看>>
人机交互实验:Android开发之人物移动、地图滑动、传感器、触屏的应用
查看>>
在人机交互实验中遇到的一些问题
查看>>
可视化实验2——用D3做图表
查看>>
Github-git pull解决远程与本地仓库的冲突
查看>>
python调用matlab环境配置,非常详细!!!
查看>>
Python-格式化输入、字符串分割
查看>>
JavaScript图片旋转缩放、像素矩阵获取
查看>>