非递归遍历树
来源:互联网 发布:matlab约束粒子群算法 编辑:程序博客网 时间:2024/04/30 14:37
在开发的过程中用到了遍历树的方法。没有使用递归,而是采用栈顶方式实现的。
把代码贴在这里,如果大家用到,可以参考一下。
这里,树是一般的树结构,不单指二叉树。
- public class Tool{
- /**
- * 利用栈遍历树,判断树中有没有和参数相同的节点
- *
- * @param root
- * @return
- */
- public boolean hasSameInTree(TreeNode root, int value) {
- Stack stack = new Stack();
- stack.push(root);
- TreeNode temp = null;
- while (true) {
- if (temp != null) {
- if (temp.value == value) {
- return true;
- }
- if (temp.kids != null) {
- for (int i = 0; i <= temp.kids.length - 1; i++) {
- stack.push(temp.kids[i]);
- }
- temp = null;
- } else {
- if (stack.size() > 0) {
- temp = (TreeNode) stack.pop();
- } else {
- temp = null;
- }
- }
- }
- if (stack.size() > 0 && temp == null) {
- temp = (TreeNode) stack.pop();
- }
- if (temp == null) {
- return false;
- }
- }
- }
- }
- private class TreeNode {
- /**
- * 父节点的引用
- */
- public TreeNode father;
- /**
- * 保存的数值
- */
- public int value;
- /**
- * 子节点的引用的数组
- */
- public TreeNode[] kids;
- /**
- * 构造函数
- *
- * @param father
- * @param gen
- * @param dir
- * @param pos
- */
- public TreeNode(TreeNode father, int value) {
- this.father = father;
- this.value = value;
- }
- }
欢迎大家批评指正。
- 非递归遍历树
- 非递归遍历树
- 非递归遍历树
- 非递归遍历二叉树
- 树的非递归遍历
- 二叉树遍历非递归
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 树的非递归遍历
- vc中几种数据类型的转换
- VC 创建快捷方式和得到桌面路径
- MOSS入门介绍 和 概念介绍
- 购物车JSP代码
- 飞花摘叶还是重剑无锋
- 非递归遍历树
- 帅哥是这样形成的
- List-C++数组
- c/c++学习笔记
- 纯技术角度看自动化测试的迷思
- 测试用例的标准
- 修复被破坏了的linux文件系统分区表
- List C++链式线性表
- 测试缺陷分析务实篇