树的广度优先遍历(非递归)和深度优先遍历
来源:互联网 发布:机构投资者持股数据 编辑:程序博客网 时间:2024/05/22 01:55
今天用java写数据结构,算是涨姿势了。。。
package leetcode.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Scanner;public class MaxSum {public static void main(String[] args) {MaxSum ms = new MaxSum();TreeNode root = ms.initTree();//ms.printTree(root);ms.printBroadTree(root);}//该方法返回树的头结点//首先写树的广度优先遍历public TreeNode initTree(){TreeNode root = null; //这是根元素return createNode(root);}public TreeNode createNode(TreeNode tn){int temp;System.out.print("请输入:");Scanner scanner = new Scanner(System.in);temp = scanner.nextInt();if (temp != 0){tn = new TreeNode();tn.value = temp;tn.lchild = createNode(tn.lchild); //在java中你只能通过参数将一个值传进一个函数,然而你是不能通过参数将一个值带出来的tn.rchild = createNode(tn.rchild);return tn;}else {tn = null;return null;}}public void printTree(TreeNode tn){if (tn != null){System.out.print(" "+tn.value);printTree(tn.lchild);printTree(tn.rchild);}}public void printBroadTree(TreeNode tn){List<TreeNode> list = new ArrayList<>(); //这个数组用作堆栈List<TreeNode> removeList = new ArrayList<>(); //这里存储的是要要删除的元素,因为已经访问过Iterator<TreeNode> iterator;TreeNode temp = null;if (tn != null){list.add(tn);}//我感觉下面这句话很关键,如果你要是while(list.size()!=0) ,那么下面有list.add()和list.remove()方法都在改变着list.size()的值int count = list.size();while (count != 0){for (int i=0; i<count; i++){temp = list.get(i);System.out.print(temp.value + " ");removeList.add(temp);if (temp.lchild != null){list.add(temp.lchild);}if (temp.rchild != null){list.add(temp.rchild);}}for (int i=0; i<removeList.size(); i++){ //将兄弟节点访问完,一并删除list.remove(removeList.get(i));}count = list.size();}}}
0 0
- 树的广度优先遍历(非递归)和深度优先遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历(递归、非递归),广度优先遍历(递归)
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历、图的深度优先和广度优先遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历、图的深度优先和广度优先遍历
- 树的深度优先遍历和广度优先遍历非递归实现.
- 【概念】【二叉树】深度优先遍历、广度优先遍历和非递归遍历
- 图的深度优先遍历(递归与非递归算法)和广度优先遍历
- [IOS APP]曾仕强演说精选-有声系列
- HDU 3652 B-number
- 数据库事务四种隔离级别
- spring 的platformTrasactionoManager API讲解(翻译)
- 一天一个LINUX命令教程[4]-chmod命令
- 树的广度优先遍历(非递归)和深度优先遍历
- Linux SVN命令详解
- 操作系统之分页分段介绍
- 创建Maven项目
- 为什么linux大多用在服务器端
- Maven 入门
- 方法和数组
- #pragma once与#ifndef #define #endif的区别 (比较全)
- windows系统下更新nodejs版本