java构造和遍历二叉树

【分析】

二叉树的结构:根节点、左子树、右子树。其中左子树的值必须小于根节点,右子树的值必须大于根节点。构造这种树结构,就是创建一个类,并提供一个方法,当给定一个值时,它能够自动创建节点并自动挂到二叉树的合适位置。

二叉树的遍历:分为先序遍历、中序遍历和后序遍历。先序遍历:根、左、右。

中需遍历:左、根、右。

后续遍历:左、右、根。

二叉树的应用:加密解密、文件压缩、快速查询、快速遍历等。

1、构造二叉树的节点对象,并提供插入方法。

 1     private int data; //存放节点数据
 2     private BinaryTree left; //左子树
 3     private BinaryTree right; //右子树
 4
 5     /**
 6      * 构造方法,创建新节点
 7      */
 8     public BinaryTree(int data) {
 9         this.data = data;
10         this.left = null;
11         this.right = null;
12     }
13
14     /**
15      * 插入新节点
16      */
17     public void insert(BinaryTree root, int data){
18         if(root !=null){
19             if(data <root.data){
20                 if(root.left ==null){     //左子树空位,插入
21                     root.left = new BinaryTree(data);
22                 }else{                    //左子树非空,将左子树作为根节点递归
23                     insert(root.left, data);
24                 }
25             }else{
26                 if(root.right ==null){
27                     root.right = new BinaryTree(data);
28                 }else{
29                     insert(root.right, data);
30                 }
31             }
32         }
33     }
34     

2.插入节点构造出二叉树,并通过先序遍历、中序遍历、后序遍历对二叉树进行遍历

 1 public static void main(String[] args) {
 2         BinaryTree root = new BinaryTree(6);  //创建根节点
 3         int[] a = {2,1,4,5,3,8,6,7,9};
 4         for (int i = 0; i < a.length; i++) {  //插入节点
 5             root.insert(root, a[i]);
 6         }
 7
 8         preTraversal( root);
 9         midTraversal( root);
10         sufTraversal( root);
11     }
 1 //先序遍历
 2     public static void preTraversal(BinaryTree root){
 3         if (root !=null) {
 4             System.out.print(root.getData() +"-");
 5             preTraversal(root.getLeft());
 6             preTraversal(root.getRight());
 7         }
 8
 9     }
10
11     //中序遍历
12         public static void midTraversal(BinaryTree root){
13             if(root !=null){
14                 midTraversal(root.getLeft());
15                 System.out.print(root.getData()+"-");
16                 midTraversal(root.getRight());
17             }
18         }
19
20     //后序遍历
21         public static void sufTraversal(BinaryTree root){
22             if(root !=null){
23             sufTraversal(root.getLeft());
24             sufTraversal(root.getRight());
25             System.out.print(root.getData()+"-");
26             }
27         }
时间: 2024-08-11 18:43:57

java构造和遍历二叉树的相关文章

数据结构Java版之遍历二叉树(六)

二叉树是我们在程序中用的最多的一种树(个人观点).最简单的一个二叉树是由一个根节点,两个子节点(一左一右成左右孩子节点)组成.二叉树是数组和链表的结合,即包含了数组的快速查找优点,又包含了链表的快速添加删除的优点.熟练掌握二叉树的遍历方法是很有必要的.下面来介绍一下基于二叉树的四种遍历方式. 下面我们以一个棵简单的二叉树为例来说明四种遍历: 创建树节点类: //树节点 class TreeNode { public char val; public TreeNode left; public T

JAVA按层级遍历二叉树

/** * @author cj 2017年7月14日下午1:14:31 */ package com.yuanye.algorithm; import java.util.LinkedList; import java.util.List; public class BinaryTree { // private static List<Node> currentLevelNodes=new ArrayList<>(); // private static List<Nod

Java:根据前序遍历与中序遍历构造出一个二叉树

给你前序遍历中序遍历,如何构造出一个二叉树? 思路: 1. 明确前序遍历与中序遍历的顺序 前序遍历:根→左子树→右子树 中序遍历:左子树→根→右子树 2. 根据前序遍历可确认根节点,在中序遍历中根节点是一个分水岭,可由根节点分辨出左右子树 3. 对左右子树分别重复第2步,可以找出左右子树的子树,也就是递归操作 代码: public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x;

JAVA递归、非递归遍历二叉树(转)

原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public static void preOrder(BinTree t) {

二叉树的构造_遍历_求数高和求节点数

1 //手工构造一颗二叉树 ,并给出递归和非递归2类7种遍历方法,树高,节点数求法和逆时针90度显示二叉树 2 //注意本文中2个 typename的使用层次 3 //递归遍历容易溢栈 4 #include <cstdlib> 5 #include <iostream> 6 #include <queue> //用到队列时需要包含此文件 7 #include <stack> //用到栈时需要包含此文件 8 9 using namespace std; 10

C++ 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树

文章转载自http://blog.csdn.net/touzani/article/details/1637195 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树. 假设序列为string型 根据前序遍历的特点, 知前序序列(Pre)的首个元素(Pre[0])为根(root), 然后在中序序列(In)中查找此根(Pre[0]), 根据中序遍历特点, 知在查找到的根(root) 前边的序列为左子树, 后边的序列为右子树. 设根前边有left个元素.. 则又有, 在前序序列中, 紧跟着根(roo

二叉树的构造和遍历——递归实现

一.二叉树的定义: 二叉树是每个结点最多有两个子树的有序树.二叉树常被用于实现二叉查找树.值得注意的是,二叉树不是树的特殊情形.在图论中,二叉树是一个连通的无环图,并且每一个顶点的度不大于2.有根二叉树还要满足根结点的度不大于2.有了根结点后,每个顶点定义了唯一的根结点,和最多2个子结点.然而,没有足够的信息来区分左结点和右结点. 二.二叉树与树的区别: 二叉树不是树的一种特殊情形,尽管其与树有许多相似之处,但树和二 叉树有两个主要差别: 1. 树中结点的最大度数没有限制,而二叉树结点的最大度数

二叉树构造、遍历和释放--自己写数据结构

直接上代码 bitree.h文件如下: #ifndef _BITREE_H_ #define _BITREE_H_ typedef char TElemType; typedef struct _BitNode { TElemType data; struct _BitNode *lchild,*rchild; }BitNode,*pBitNode; int bittree_creat(BitNode **T); void pre_order(BitNode *T); void mid_orde

二叉树的构造与遍历

1 #include <iostream> 2 using namespace std; 3 4 typedef struct node 5 { 6 char data; 7 struct node *lchild; 8 struct node *rchild; 9 }BiTreeNode,*BiTree; 10 11 void createBiTree(BiTree &T) 12 { 13 char c; 14 cin>>c; 15 if(c=='#') T=NULL;