二叉树 先序遍历 中序遍历 后续遍历 java实现
来源:互联网 发布:单片机呼吸灯程序 编辑:程序博客网 时间:2024/06/06 03:01
二叉树是一种非常重要的数据结构,也是平时面试的时候面试官喜欢出的问题之一。关于二叉树的概念,就不做过多解释,估计各种课本网络上各种资料都充斥着关于二叉树的原理介绍。我们是实战派,原理不在啰嗦,重点看代码,看看怎样实现一棵二叉树,并分别用实现先序遍历,中序遍历以及后续遍历。
package leilei.bit.edu.tree;import java.util.Stack;public class BinTree<T> { private Node<T> root; public BinTree(Node<T> root) { this.root = root; } public Node<T> getRoot() { return root; } public void setRoot(Node<T> root) { this.root = root; } //内部节点类 private static class Node<T> { public T data; public Node<T> left; public Node<T> right; public Node(T data,Node<T> left,Node<T> right) { this.data = data; this.left = left; this.right = right; } } /* * 递归先序遍历 */ public void preorder(Node<T> root) { if (root != null) { System.out.print(root.data + " "); preorder(root.left); preorder(root.right); } } /* * 递归中序遍历 */ public void midorder(Node<T> root) { if (root != null) { midorder(root.left); System.out.print(root.data + " "); midorder(root.right); } } /* * 递归后序遍历 */ public void postorder(Node<T> root) { if (root != null) { postorder(root.left); postorder(root.right); System.out.print(root.data + " "); } } /* * 非递归先序 */ public void preorder_no_recursive(Node<T> root) { if (root == null) return; Stack<Node<T>> stack = new Stack<Node<T>>(); stack.push(root); while(!stack.isEmpty()) { while(stack.peek() != null) { System.out.print(stack.peek().data + " "); stack.push(stack.peek().left); } Node<T> p = stack.pop(); if(!stack.isEmpty()) { p = stack.pop(); stack.push(p.right); } } } public static void main(String[] args) { Node<String> G = new Node<String>("G",null,null); Node<String> F = new Node<String>("F",null,null); Node<String> E = new Node<String>("E",null,null); Node<String> D = new Node<String>("D",F,null); Node<String> B = new Node<String>("B",D,E); Node<String> C = new Node<String>("C",null,G); Node<String> root = new Node<String>("A",B,C); BinTree<String> tree = new BinTree<String>(root); System.out.println("The preorder is:"); tree.preorder(tree.root); System.out.println("\nThe midorder is:"); tree.midorder(tree.root); System.out.println("\nThe postorder is:"); tree.postorder(tree.root); System.out.println("\nThe no_recursive is:"); tree.preorder_no_recursive(tree.root); }}
代码运行结果
The preorder is:A B D F E C G The midorder is:F D B E A C G The postorder is:F D E B G C A The no_recursive is:A B D F E C G
另外发现一个写二叉树不错的链接,有空可以详细看看里面的代码:
https://github.com/yuzhangcmu/LeetCode/blob/master/tree/TreeDemo.java
0 0
- 二叉树 先序遍历 中序遍历 后续遍历 java实现
- java实现二叉树的构建以及三种遍历方法(先序遍历,中序遍历,后续遍历)
- 二叉树(一) 先序遍历、中序遍历、后续遍历、层次遍历的递归与非递归实现
- 二叉树的先序遍历、中序遍历、后续遍历和二叉树还原
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树前序遍历 中序遍历 后续遍历 算法实现
- 二叉树遍历,已知前序遍历与中序遍历,求后续遍历 使用java(递归方式)实现
- java实现二叉树的先序遍历,中序遍历,后序遍历
- java实现二叉树已知先序遍历和中序遍历求后序遍历
- 二叉树遍历算法(递归实现先序中序和后续遍历)(非递归实现中序和先续)
- C#实现二叉树数据结构以及先序、中序、后续遍历
- 二叉树的先序、中序、后续遍历的递归和非递归实现
- java实现二叉树的中序遍历和后续遍历
- Java实现-中序遍历和后续遍历构建二叉树
- 编程实现二叉树的建立,前序遍历,中序遍历和后续遍历
- leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- python实现二叉树,前序遍历,中序遍历,后续遍历
- 学生信息管理系统总结(三)
- Huffman树基本原理介绍
- 121BestTimetoBuyandSellStock.java
- oracle 数据库索引的优缺点以及合理建立索引
- 基因数据处理34之使用samtools和bcftools进行变异分析
- 二叉树 先序遍历 中序遍历 后续遍历 java实现
- nyoj525 一道水题
- Windows 10的锁屏壁纸文件位置
- sigwait
- Google Guava官方教程
- 数学书推荐
- 第12周项目1-实现复数类中的运算符重载-2
- Python读取iOS安装包IPA中的信息和图片
- RMQ算法