数据结构_二叉树非递归遍历
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
数据结构_二叉树非递归遍历相关推荐
- C++版二叉树非递归遍历
C++版二叉树非递归遍历 文章目录 C++版二叉树非递归遍历 一.二叉树前序遍历 二.二叉树中序遍历 三.二叉树后序遍历 一.二叉树前序遍历 /*** Definition for a binary ...
- 一种二叉树非递归遍历的简单写法
一种二叉树非递归遍历的简单写法 目录 一种二叉树非递归遍历的简单写法 先序遍历 中序遍历 后序遍历 二叉树的遍历是数据结构中非常基础的一个知识点,也是面试手撕代码环节的一个常见题目.这个问题的递归写法 ...
- 二叉树非递归遍历(模版)
读完本篇内容大约花费您7分钟时间 本文主要讲解二叉树非递归遍历,由于是非递归遍历,所以需要用到栈stack,我们如果仔细考虑递归遍历的代码,就能明白非递归种栈的应用. 由于几种遍历方式只是在处理中间节 ...
- 二叉树非递归遍历的一点理解
二叉树是我们必须要了解的一个数据结构,针对这个数据结构我们可以衍生出好多知识. 主要是有几种遍历方式,前序遍历,中序遍历,后续遍历,层次遍历. 下面我们根据这个图来详细的说一下这几种非递归遍历的思想与 ...
- 【数据结构】--- 二叉树的递归遍历和非递归遍历【C语言实现】
目录 1. 创建一颗二叉树 2.递归前序遍历二叉树 3.递归中序遍历二叉树 4.递归后序遍历二叉树 5. 测试递归打印二叉树代码 6. 非-递归前序遍历二叉树 7. 非-递归实现中序遍历二叉树 8. ...
- 二叉树非递归遍历的经典求解
#include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node {dataty ...
- 二叉树非递归遍历实现(Java)
首先理解一下二叉树节点结构.left指向左节点,right指向右节点,val为节点中的值. class TreeNode {int val;TreeNode left;TreeNode right;p ...
- 数据结构_非递归遍历二叉树(C语言)
数据结构总目录 非递归遍历二叉树 1. 图文解析 对于链式二叉树,如果要用非递归的方式进行前.中.后序遍历,则需要借助一个栈实现,而层序遍历则需要借助队列来实现. 构建如下二叉树: 非递归先序遍历 ( ...
- C语言-数据结构-二叉树的递归遍历和非递归遍历
看了大量网络相关的理论和程序,多数的C++ 写的,这里使用devC++ 编程语言 C语言; 整合王道考研答案和理论, 还有小甲鱼的数据结构, 郝斌的数据结构,各有特点吧 最值得研究的还是后序遍历的非递 ...
最新文章
- lighttpd 负载均衡-反向代理+cache浅谈
- 【OpenCV 4开发详解】图像连接
- VC的包含文件和引用文件是不一样的~
- SSM实现导出报表为Excel
- Kitten编程猫里如何先后播放不同的背景音乐
- C和指针之动态内存分配之输入很多整数进行排序
- LeetCode MySQL 1097. 游戏玩法分析 V
- [连载型] Neutron 系列 (15): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的...
- PyTorch 1.0 中文文档:torch.nn.init
- python蟒蛇绘制
- CenOS6 nginx+pxe+tftpd+samba/nfs+dhcpd 无盘安装windows linux
- 最全的响应式设计资源库
- 如何在Windows平台上基于github搭建个人博客平台
- 苹果库乐队怎么玩_苹果手机使用技巧(例iPhone11)
- 计算机自配,手把手教你选择电脑配件,自己动手配置一台低价高能DIY计算机
- win10教育版激活部分方法
- Android基于opencv4.6.0实现人脸识别功能
- ml-agents与tensorflow结合的先关操作文档
- PHP审计工具之 RIPS
- 活体检测论文研读三:Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision