二叉树前序 中序 后序 遍历

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 二叉树遍历相关推荐

  1. 超像素SLIC算法源码阅读

    超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...

  2. 海外某音x-gorgon算法原理分析及算法源码公布

    算法源码见附件 分享一个去年逆的一个海外版某音 1474版本 x-gorgon算法,这里简单介绍一下算法原理,首先malloc出来一个0x1A大小的空间,然后截取用户传入的byte数组中的参数,截取开 ...

  3. [unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析

    recast navigation navmesh导航网格算法源码分析 Author:  林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 本文为了方便 ...

  4. 基于新唐M0的XXTEA加密解密算法源码

    源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...

  5. [转] GIS算法源码集合

    其他GIS相关代码下载索引 http://www.mygis.com.cn/codeindex10.htm 1.深度优先实现的路径分析源码 http://www.mygis.com.cn/codes/ ...

  6. 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择

    前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...

  7. Learning to Rank中Pointwise关于PRank算法源码实现

    [学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...

  8. Java自动计算迷宫正确路线算法源码

    简介: Java自动计算迷宫正确路线算法源码,首先迷宫需要满足存在开始标识和结束标识与墙标识,然后设置好行数与列数就可以开始计算正确路线了,采用的是为二维数组然后走遍所有路线的方式. 网盘下载地址: ...

  9. Metis异常检测算法源码概要

    Metis异常检测算法源码概要 算法源码目录 算法层目录 基于指数移动平均算法(EWMA) 孤立森林 xgboost gbdt 3-Sigma 多项式回归 特征层目录 拟合特征 分类特征 统计特征 其 ...

最新文章

  1. 20145328 《网络对抗技术》恶意代码分析
  2. shell--特殊位置参数变量及常用内置变量
  3. Spring4+Springmvc+quartz实现多线程动态定时调度
  4. 计算机毕业设计中用Java实现商场库存清单案例
  5. tracePro材料目录与名称
  6. adb 切换默认桌面,OPPO默认桌面替换教程
  7. SpringBoot整合WebSocket实现聊天室系统
  8. luogu1359 租用游艇
  9. 关闭笔记本电脑自带键盘
  10. 计算机属于什么学1001计算机属于什么学,怎样学电脑(初学电脑先学什么)
  11. 动态域名解析概述及操作步骤讲解
  12. NAS实现家用服务器
  13. 触摸屏手机的工作原理是怎样的?
  14. Win系统如何取消f1打开浏览器
  15. 系统分析师学习笔记(六)
  16. 调用聚合数据平台天气接口
  17. 启动nodejs时报错 internal/modules/cjs/loader.js:584的解决办法
  18. 如何禁用/启用笔记本内置键盘?
  19. 石基信息:战略性收购思迅软件,线下支付平台布局完善
  20. Android监听锁屏键、Home键

热门文章

  1. 程序员职业发展路径图:从菜鸟工程师到高级架构师
  2. java中如何忽略字符串中的转义字符--转载
  3. 数字证书原理,公钥私钥加密原理
  4. Lesson 12.3 线性回归建模实验
  5. 【文本挖掘】反欺诈模糊匹配
  6. 【图数据库】史上超全面的Neo4j使用指南
  7. MapReduce示例——WordCount(统计单词)
  8. 2020年最新前端学习路线
  9. hyperledger-simple-app
  10. MySQL - 存储引擎初探