package create;import java.util.Stack;
/*** 创建二叉排序树,二叉树的六种遍历* @author root**/
public class BiTree {static class Node{int value;Node left = null;Node right = null;public Node(int value){this.value = value;}}public static void main(String[] args) {// TODO Auto-generated method stubint []data = {6,5,3,4,2,8,7,9,1};BiTree bt = new BiTree();Node root = bt.creatBiTree(data);System.out.println(bt.getDepth(root));}//创建二叉排序树public Node creatBiTree(int []data){Node root = new Node(data[0]);for(int i=1; i<data.length; i++){insert(root, data[i]);}return root;}//插入节点public void insert(Node root, int value){if(value<root.value){if(root.left==null){root.left = new Node(value);}else{insert(root.left, value);}}else{if(root.right==null){root.right = new Node(value);}else{insert(root.right, value);}}}//得到树的深度public int getDepth(Node root){int depth = 0;int left = 0;int right = 0;if(root!=null){depth++;left = getDepth(root.left);right = getDepth(root.right);}return depth+(left>right?left:right);}//递归先序遍历public void preOrderTraverse(Node root){if(root!=null){System.out.println(root.value);preOrderTraverse(root.left);preOrderTraverse(root.right);}}//循环先序遍历public void cyclePreOrderTraverse(Node root){Stack<Node> stack = new Stack<Node>();Node node = root;while(node!=null||!stack.isEmpty()){while(node!=null){stack.push(node);System.out.println(node.value);node=node.left;}if(!stack.isEmpty()){node = stack.pop();node = node.right;}}}//递归中序遍历public void inOrderTraverse(Node root){if(root!=null){inOrderTraverse(root.left);System.out.println(root.value);inOrderTraverse(root.right);}}//循环中序遍历public void cycleInOrderTraverse(Node root){Stack<Node> stack = new Stack<Node>();Node node = root;while(node!=null||!stack.isEmpty()){while(node!=null){stack.push(node);node=node.left;}if(!stack.isEmpty()){node = stack.pop();System.out.println(node.value);node = node.right;}}}//递归后序遍历public void postOrderTraverse(Node root){if(root!=null){postOrderTraverse(root.left);postOrderTraverse(root.right);System.out.println(root.value);}}//循环后序遍历public void cyclePostOrderTraverse(Node root){Stack<Node> stack = new Stack<Node>();Node node = root;stack.push(root);Node pre = null;while(!stack.isEmpty()){node = stack.peek();if(node.left==null && node.right==null || pre!=null && (pre==node.left || pre==node.right)){System.out.println(node.value);stack.pop();pre = node;}else{if(node.right!=null){stack.push(node.right);}if(node.left!=null){stack.push(node.left);}}}}
}

转载于:https://www.cnblogs.com/yan456jie/p/5369411.html

创建二叉排序树,二叉树的六种遍历相关推荐

  1. 二叉树的六种遍历方法汇总(转)

    原文地址 ,两种思路都不错 第一种 前序 void preOrder(Node *p) //非递归 {if(!p) return;stack<Node*> s;Node *t;s.push ...

  2. SWUST OJ 980: 输出利用先序遍历创建的二叉树的层次遍历序列

    [24行]之前看到众多巨佬用数组写二叉树,然后在他们的基础上,我发现层序遍历完全可以用数组写并且代码不超过30行.也许他们认为过于简单故未单独写博文,于是我打算补一下,希望各位不要在意. 题目: 用数 ...

  3. 二叉树的层序遍历(两种方法实现)

    两种方法实现二叉树的层序遍历 1.说明 二叉树的层序遍历是面试经常会被考察的知识点,甚至要求当场写出实现过程. 层序遍历所要解决的问题很好理解,就是按二叉树从上到下,从左到右依次打印每个节点中存储的数 ...

  4. 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)

    目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...

  5. js实现创建二叉树+先序遍历

    二叉树概念 1.除了最下面一层,每个节点都是父节点,每个节点都有且最多有两个子节点: 2.除了嘴上面一层,每个节点是子节点,每个节点都会有一个父节点: 3.最上面一层的节点为根节点: 图例说明: 先序 ...

  6. Java实现二叉树的创建、递归/非递归遍历

    近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6. ...

  7. SWUST OJ#1052 输出利用先序遍历创建的二叉树中的指定结点的双亲结点

    目录 题目 思路 代码 题目 题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的双亲结点.约定二叉树结点数据为单个大写英文字符.当接收的数据是字符"#"时表示该结点 ...

  8. 971: 统计利用先序遍历创建的二叉树的深度

    971: 统计利用先序遍历创建的二叉树的深度 题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接 ...

  9. #swust oj971 和972统计利用先序遍历创建的二叉树的深度和宽度

    971: 统计利用先序遍历创建的二叉树的深度 思路: 1.先序递归遍历创建二叉树 2.当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点 3.最后后序遍历算法统计二叉树 ...

  10. SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度

    SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按 ...

最新文章

  1. 运行SSIS包的几种方式
  2. mySQL之单表更新
  3. 【Paddle】解压文件到指定文件夹
  4. android开发按钮颜色,Android编程实现简单设置按钮颜色的方法
  5. mui初级入门教程(六)— 模板页面实现原理及多端适配指南
  6. spring boot入门(九) springboot的过滤器filter。最完整、简单易懂、详细的spring boot教程。
  7. Android 虚拟机与真机调试配置
  8. 林阳斌集美大学计算机学院,集美大学计算机工程学院导师教师师资介绍简介-林阳斌副教授(2021.04.06)...
  9. Spark技术互动问答分享
  10. MATLAB实现傅里叶变换
  11. QQ、微信动态图表情包怎么制作?视频如何转GIF
  12. 基于支持向量机的新闻分类
  13. [已解决]踩过的坑之mysql连接报“Communications link failure”错误
  14. 搭建ftp服务器根目录文件夹,ftp服务器根目录传文件夹
  15. 2022智源大会议程丨类脑计算前沿与挑战
  16. 热烈祝贺中贝通集团和武汉鑫炀科技顺利通过CMMIV2.0三级认证
  17. 五线舵机驱动程序_16路舵机驱动板程序使用说明
  18. 无中介租房搜房工具 V1.0
  19. c语言 申请变量函数,C语言中变量和函数
  20. Goland 1.15运行报错:该版本的 %1 与你运行的 Windows 版本不兼容

热门文章

  1. Docker系列(十)Dockerfile指令
  2. model 字段参数 choice
  3. Android Studio添加aar依赖
  4. BZOJ3626 神思路的树链剖分+线段树维护
  5. 使用NEWSEQUENTIALID解决GUID聚集索引问题
  6. 【python】如何查看已经安装的python软件包和版本
  7. [转]FCKeditor在ASP配置环境中的使用
  8. FHQ Treap摘要
  9. Oracle、SQL Server、MySQL数据类型对比
  10. 转:VC++获取屏幕大小第一篇 像素大小GetSystemMetrics