《漫画算法》源码整理-3 二叉树遍历
二叉树前序 中序 后序 遍历
import java.util.Arrays;
import java.util.LinkedList;public class BinaryTreeTraversal {/*** 构建二叉树* @param inputList 输入序列*/public static TreeNode createBinaryTree(LinkedList<Integer> inputList){TreeNode node = null;if(inputList==null || inputList.isEmpty()){return null;}Integer data = inputList.removeFirst();//这里的判空很关键。如果元素是空,说明该节点不存在,跳出这一层递归;如果元素非空,继续递归构建该节点的左右孩子。if(data != null){node = new TreeNode(data);node.leftChild = createBinaryTree(inputList);node.rightChild = createBinaryTree(inputList);}return node;}/*** 二叉树前序遍历* @param node 二叉树节点*/public static void preOrderTraversal(TreeNode node){if(node == null){return;}System.out.println(node.data);preOrderTraversal(node.leftChild);preOrderTraversal(node.rightChild);}/*** 二叉树中序遍历* @param node 二叉树节点*/public static void inOrderTraversal(TreeNode node){if(node == null){return;}inOrderTraversal(node.leftChild);System.out.println(node.data);inOrderTraversal(node.rightChild);}/*** 二叉树后序遍历* @param node 二叉树节点*/public static void postOrderTraversal(TreeNode node){if(node == null){return;}postOrderTraversal(node.leftChild);postOrderTraversal(node.rightChild);System.out.println(node.data);}/*** 二叉树节点*/private static class TreeNode {int data;TreeNode leftChild;TreeNode rightChild;TreeNode(int data) {this.data = data;}}public static void main(String[] args) {LinkedList<Integer> inputList = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4,}));TreeNode treeNode = createBinaryTree(inputList);System.out.println("前序遍历:");preOrderTraversal(treeNode);System.out.println("中序遍历:");inOrderTraversal(treeNode);System.out.println("后序遍历:");postOrderTraversal(treeNode);}}
二叉树层序遍历
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;public class BinaryTreeTraversalLevel {/*** 构建二叉树* @param inputList 输入序列*/public static TreeNode createBinaryTree(LinkedList<Integer> inputList){TreeNode node = null;if(inputList==null || inputList.isEmpty()){return null;}Integer data = inputList.removeFirst();//这里的判空很关键。如果元素是空,说明该节点不存在,跳出这一层递归;如果元素非空,继续递归构建该节点的左右孩子。if(data != null){node = new TreeNode(data);node.leftChild = createBinaryTree(inputList);node.rightChild = createBinaryTree(inputList);}return node;}/*** 二叉树层序遍历* @param root 二叉树根节点*/public static void levelOrderTraversal(TreeNode root){Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);while(!queue.isEmpty()){TreeNode node = queue.poll();System.out.println(node.data);if(node.leftChild != null){queue.offer(node.leftChild);}if(node.rightChild != null){queue.offer(node.rightChild);}}}/*** 二叉树节点*/private static class TreeNode {int data;TreeNode leftChild;TreeNode rightChild;TreeNode(int data) {this.data = data;}}public static void main(String[] args) {LinkedList<Integer> inputList = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4,}));TreeNode treeNode = createBinaryTree(inputList);System.out.println("层序遍历:");levelOrderTraversal(treeNode);}}
二叉树非递归前序遍历
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Stack;public class BinaryTreeTraversalStack {/*** 构建二叉树* @param inputList 输入序列*/public static TreeNode createBinaryTree(LinkedList<Integer> inputList){TreeNode node = null;if(inputList==null || inputList.isEmpty()){return null;}Integer data = inputList.removeFirst();//这里的判空很关键。如果元素是空,说明该节点不存在,跳出这一层递归;如果元素非空,继续递归构建该节点的左右孩子。if(data != null){node = new TreeNode(data);node.leftChild = createBinaryTree(inputList);node.rightChild = createBinaryTree(inputList);}return node;}/*** 二叉树非递归前序遍历* @param root 二叉树根节点*/public static void preOrderTraveralWithStack(TreeNode root){Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode treeNode = root;while(treeNode!=null || !stack.isEmpty()){//迭代访问节点的左孩子,并入栈while (treeNode != null){System.out.println(treeNode.data);stack.push(treeNode);treeNode = treeNode.leftChild;}//如果节点没有左孩子,则弹出栈顶节点,访问节点右孩子if(!stack.isEmpty()){treeNode = stack.pop();treeNode = treeNode.rightChild;}}}/*** 二叉树节点*/private static class TreeNode {int data;TreeNode leftChild;TreeNode rightChild;TreeNode(int data) {this.data = data;}}public static void main(String[] args) {LinkedList<Integer> inputList = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4,}));TreeNode treeNode = createBinaryTree(inputList);preOrderTraveralWithStack(treeNode);}}
《漫画算法》源码整理-3 二叉树遍历相关推荐
- 超像素SLIC算法源码阅读
超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...
- 海外某音x-gorgon算法原理分析及算法源码公布
算法源码见附件 分享一个去年逆的一个海外版某音 1474版本 x-gorgon算法,这里简单介绍一下算法原理,首先malloc出来一个0x1A大小的空间,然后截取用户传入的byte数组中的参数,截取开 ...
- [unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析
recast navigation navmesh导航网格算法源码分析 Author: 林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 本文为了方便 ...
- 基于新唐M0的XXTEA加密解密算法源码
源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...
- [转] GIS算法源码集合
其他GIS相关代码下载索引 http://www.mygis.com.cn/codeindex10.htm 1.深度优先实现的路径分析源码 http://www.mygis.com.cn/codes/ ...
- 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择
前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...
- Learning to Rank中Pointwise关于PRank算法源码实现
[学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...
- Java自动计算迷宫正确路线算法源码
简介: Java自动计算迷宫正确路线算法源码,首先迷宫需要满足存在开始标识和结束标识与墙标识,然后设置好行数与列数就可以开始计算正确路线了,采用的是为二维数组然后走遍所有路线的方式. 网盘下载地址: ...
- Metis异常检测算法源码概要
Metis异常检测算法源码概要 算法源码目录 算法层目录 基于指数移动平均算法(EWMA) 孤立森林 xgboost gbdt 3-Sigma 多项式回归 特征层目录 拟合特征 分类特征 统计特征 其 ...
最新文章
- 20145328 《网络对抗技术》恶意代码分析
- shell--特殊位置参数变量及常用内置变量
- Spring4+Springmvc+quartz实现多线程动态定时调度
- 计算机毕业设计中用Java实现商场库存清单案例
- tracePro材料目录与名称
- adb 切换默认桌面,OPPO默认桌面替换教程
- SpringBoot整合WebSocket实现聊天室系统
- luogu1359 租用游艇
- 关闭笔记本电脑自带键盘
- 计算机属于什么学1001计算机属于什么学,怎样学电脑(初学电脑先学什么)
- 动态域名解析概述及操作步骤讲解
- NAS实现家用服务器
- 触摸屏手机的工作原理是怎样的?
- Win系统如何取消f1打开浏览器
- 系统分析师学习笔记(六)
- 调用聚合数据平台天气接口
- 启动nodejs时报错 internal/modules/cjs/loader.js:584的解决办法
- 如何禁用/启用笔记本内置键盘?
- 石基信息:战略性收购思迅软件,线下支付平台布局完善
- Android监听锁屏键、Home键