package zz;import java.util.Stack;/*** 二叉树中的二叉搜索树,即一个节点的左子节点关键值小于这个节点,右子节点的关键值大于这个节点* * @author Administrator**/
class TreeNode {int value;TreeNode leftChild;TreeNode rightChild;public TreeNode(int value) {this.value = value;this.leftChild = null;this.rightChild = null;}
}public class Test {// 求二叉树的深度public static int getTreeLength(TreeNode root) {if (root == null)return 0;if (root.leftChild == null && root.rightChild == null)return 1;elsereturn 1 + Math.max(getTreeLength(root.leftChild), getTreeLength(root.rightChild));}// 插入子节点public static void insert(TreeNode root, int data) {TreeNode newNode = new TreeNode(data);if (root == null) {root = newNode;root.leftChild = null;root.rightChild = null;} else {TreeNode cur = root;TreeNode parent;while (true) {parent = cur;if (data <= cur.value) {cur = cur.leftChild;if (cur == null) {parent.leftChild = newNode;return;}} else {cur = cur.rightChild;if (cur == null) {parent.rightChild = newNode;return;}}}}}// 查找二叉搜索树中的某个节点public static TreeNode find(TreeNode root, int data) {TreeNode cur = root;while (data != cur.value) {if (data > cur.value) {cur = cur.rightChild;} else {cur = cur.leftChild;}if (cur == null)return null;}return cur;}// 先序遍历(递归实现):先访问根节点,再访问左子节点,最后访问右孩子节点public static void recPreOrder(TreeNode root) {if (root == null)return;System.out.print(root.value + ",");if (root.leftChild != null)recPreOrder(root.leftChild);if (root.rightChild != null)recPreOrder(root.rightChild);}// 先序遍历(栈实现):先访问根节点,再访问左子节点,最后访问右孩子节点public static void PreOrder(TreeNode root) {if (root == null)  return;Stack<TreeNode> stacks = new Stack<TreeNode>();TreeNode node = root;while (node != null || stacks.size() > 0) {while (node != null) {System.out.print(node.value + " ");stacks.push(node);node = node.leftChild;}if (stacks.size() > 0) {node = stacks.pop();//System.out.print(node.value + ",");node = node.rightChild;}}}// 中序遍历(递归实现):先访问左子节点,再访问根节点,最后访问右子节点public static void recInOrder(TreeNode root) {if (root == null)return;if (root.leftChild != null)recInOrder(root.leftChild);System.out.print(root.value + ",");if (root.rightChild != null)recInOrder(root.rightChild);}//中序遍历(栈实现):先访问左子节点,再访问根节点,最后访问右子节点public static void InOrder(TreeNode root) {if(root == null)  return;Stack<TreeNode> stacks = new Stack<TreeNode>();TreeNode node = root;while(node != null || stacks.size() > 0) {while(node != null) {stacks.push(node);node = node.leftChild;}if(!stacks.isEmpty()) {node = stacks.pop();System.out.print(node.value + " ");node = node.rightChild;}}}// 后序遍历(递归实现):先访问左子节点,再访问右子节点,最后访问根节点public static void recPostOrder(TreeNode root) {if (root == null)return;if (root.leftChild != null)recInOrder(root.leftChild);if (root.rightChild != null)recInOrder(root.rightChild);System.out.print(root.value + ",");}// 后序遍历(栈实现):先访问左子节点,再访问右子节点,最后访问根节点public static void PostOrder(TreeNode root) {if(root == null)  return;Stack<TreeNode> stacks = new Stack<TreeNode>();TreeNode node = root;TreeNode preNode = null;while(node != null || !stacks.isEmpty()) {while(node != null) {stacks.push(node);node = node.leftChild;}node = stacks.peek();if(node.rightChild == null || node.rightChild == preNode) {System.out.print(node.value + " ");node = stacks.pop();preNode = node;node = null;} else {node = node.rightChild;}}}public static void main(String[] args) {TreeNode root = new TreeNode(4);insert(root, 2);insert(root, 6);insert(root, 1);insert(root, 3);insert(root, 5);insert(root, 7);insert(root, 8);System.out.println("非递归先序遍历树:");PreOrder(root);System.out.println();System.out.println("非递归中序遍历树");InOrder(root);System.out.println();System.out.println("非递归后序遍历树");PostOrder(root);}
}

  

转载于:https://www.cnblogs.com/zzsaf/p/7085993.html

数据结构_二叉树非递归遍历相关推荐

  1. C++版二叉树非递归遍历

    C++版二叉树非递归遍历 文章目录 C++版二叉树非递归遍历 一.二叉树前序遍历 二.二叉树中序遍历 三.二叉树后序遍历 一.二叉树前序遍历 /*** Definition for a binary ...

  2. 一种二叉树非递归遍历的简单写法

    一种二叉树非递归遍历的简单写法 目录 一种二叉树非递归遍历的简单写法 先序遍历 中序遍历 后序遍历 二叉树的遍历是数据结构中非常基础的一个知识点,也是面试手撕代码环节的一个常见题目.这个问题的递归写法 ...

  3. 二叉树非递归遍历(模版)

    读完本篇内容大约花费您7分钟时间 本文主要讲解二叉树非递归遍历,由于是非递归遍历,所以需要用到栈stack,我们如果仔细考虑递归遍历的代码,就能明白非递归种栈的应用. 由于几种遍历方式只是在处理中间节 ...

  4. 二叉树非递归遍历的一点理解

    二叉树是我们必须要了解的一个数据结构,针对这个数据结构我们可以衍生出好多知识. 主要是有几种遍历方式,前序遍历,中序遍历,后续遍历,层次遍历. 下面我们根据这个图来详细的说一下这几种非递归遍历的思想与 ...

  5. 【数据结构】--- 二叉树的递归遍历和非递归遍历【C语言实现】

    目录 1. 创建一颗二叉树 2.递归前序遍历二叉树 3.递归中序遍历二叉树 4.递归后序遍历二叉树 5. 测试递归打印二叉树代码 6. 非-递归前序遍历二叉树 7. 非-递归实现中序遍历二叉树 8.  ...

  6. 二叉树非递归遍历的经典求解

    #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node {dataty ...

  7. 二叉树非递归遍历实现(Java)

    首先理解一下二叉树节点结构.left指向左节点,right指向右节点,val为节点中的值. class TreeNode {int val;TreeNode left;TreeNode right;p ...

  8. 数据结构_非递归遍历二叉树(C语言)

    数据结构总目录 非递归遍历二叉树 1. 图文解析 对于链式二叉树,如果要用非递归的方式进行前.中.后序遍历,则需要借助一个栈实现,而层序遍历则需要借助队列来实现. 构建如下二叉树: 非递归先序遍历 ( ...

  9. C语言-数据结构-二叉树的递归遍历和非递归遍历

    看了大量网络相关的理论和程序,多数的C++ 写的,这里使用devC++ 编程语言 C语言; 整合王道考研答案和理论, 还有小甲鱼的数据结构, 郝斌的数据结构,各有特点吧 最值得研究的还是后序遍历的非递 ...

最新文章

  1. lighttpd 负载均衡-反向代理+cache浅谈
  2. 【OpenCV 4开发详解】图像连接
  3. VC的包含文件和引用文件是不一样的~
  4. SSM实现导出报表为Excel
  5. Kitten编程猫里如何先后播放不同的背景音乐
  6. C和指针之动态内存分配之输入很多整数进行排序
  7. LeetCode MySQL 1097. 游戏玩法分析 V
  8. [连载型] Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的...
  9. PyTorch 1.0 中文文档:torch.nn.init
  10. python蟒蛇绘制
  11. CenOS6 nginx+pxe+tftpd+samba/nfs+dhcpd 无盘安装windows  linux
  12. 最全的响应式设计资源库
  13. 如何在Windows平台上基于github搭建个人博客平台
  14. 苹果库乐队怎么玩_苹果手机使用技巧(例iPhone11)
  15. 计算机自配,手把手教你选择电脑配件,自己动手配置一台低价高能DIY计算机
  16. win10教育版激活部分方法
  17. Android基于opencv4.6.0实现人脸识别功能
  18. ml-agents与tensorflow结合的先关操作文档
  19. PHP审计工具之 RIPS
  20. 活体检测论文研读三:Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision

热门文章

  1. iOS UIWebView打电话
  2. Maven MyEclipse创建web项目没有src/maim/java
  3. localStorage、cookie
  4. 字符编码笔记:ASCII,Unicode和UTF-8(转)
  5. 特斯拉起诉离职员工窃取机密代码和文件
  6. 我发现了25个影响力达20多年的 Windows 0day,微软刚修完11个
  7. csharp: json to csharp
  8. CSS 设置背景颜色透明,文字不透明
  9. 【Android】不依赖焦点和选中的TextView跑马灯
  10. ASCII、ANSI、UNICODE及UTF-8编码