java生成二叉树和遍历

在java中实现二叉树和链表的方法都是在类中定义该类的对象引用

比如

class Tree
{
    int data;
    Tree left;
    Tree right;
}

这样的话当我们new一个Tree对象的时候,该对象就拥有了left和right两个对象,这样就起到了连接的

作用,在链表中就是连接了下一个,在树中就相当于边,这样就起到一个接一个的效果。总之,就是吧对象连接起来了。

下面是完整代码

package code;

public class TwoTree
{
    public static void main(String[] args)
    {
        Tree root=new Tree(50);
        int array[]={25,89,48,90,101,13,45,60};
        for(int n=0;n<8;n++)
        {
            root.insert(root, array[n]);
        }
        Bianli bl=new Bianli(root);
        bl.second(root);
    }
}
class Tree
{
    int data;
    Tree left;
    Tree right;
    //每一棵树
    public Tree(int data)
    {
        this.data=data;
        left=null;
        right=null;
    }
    public void insert(Tree root,int data)
    {
        //如果比根大,如果右边为空,就放到根的右边,否则,则以此时根的右边为另一棵树的根,放到他的右边
        //依次下去
        if(data>root.data)
        {
            if(root.right==null)
            {
                root.right=new Tree(data);
            }

            else
            {
                this.insert(root.right, data);
            }
        }
        //左边同理
        else
        {
            if(root.left==null)
                root.left=new Tree(data);
            else
                this.insert(root.left, data);
        }

    }

}
class Bianli
{
    Tree root;
    public Bianli(Tree root)
    {
        this.root=root;
    }
    //第一种遍历方法,前序遍历,根--左子树--右子树
    public void first(Tree root)
    {
        if(root!=null)
        {
            System.out.println(root.data);
            first(root.left);
            first(root.right);
        }

    }
    //第二种遍历方法。中序遍历  A字形遍历, 右边的从上到下,左边的从下到上
    public void second(Tree root)
    {
        if(root!=null)
        {
            second(root.left);
            System.out.println(root.data);
            second(root.right);
        }
    }
      //第三种后序遍历  public void third(Tree root)
    {
        if(root!=null)
        {
            third(root.left);
            third(root.right);
            System.out.println(root.data);
        }

    }
}

在代码中我们可以发现用了很多的递归,先拿生成树的递归说。

public void insert(Tree root,int data)
    {
        //如果比根大,如果右边为空,就放到根的右边,否则,则以此时根的右边为另一棵树的根,放到他的右边
        //以此下去
        if(data>root.data)
        {
            if(root.right==null)
            {
                root.right=new Tree(data);
            }

            else
            {
                this.insert(root.right, data);
            }
        }
        //左边同理
        else
        {
            if(root.left==null)
                root.left=new Tree(data);
            else
                this.insert(root.left, data);
        }

    }

这里的递归是这样实现的,当我们根的有右边为空的话,那么就将添加的对象添加至右边

否则的话,就递归,即将根的右边的对象作为子树的一个根,依次这样下去。

我们可以这样理解,将大的一棵树看成是多课/\这样的一棵树(二叉树)。

----------------------------------------

二叉树的遍历,在代码中的三种遍历,我们发现都代码差不多,只不过输出的语句位置不同。这个需要

我们自己去体会,下面简单讲一下。

我们需要回到递归的本质

int num=0;
public void DG(int n)
{
   if(n==1)
       return 1;
    num=n*DG(n-1);
}

这是n的阶乘,最经典的递归的例子。

我们分析可以知道,递归就是一个方法调用自己,

比如上面代码中的DG 方法里面调用DG方法

我们需要一个条件是结束递归,然后再从后往前面计算,最后回到递归开始的地方。

同样上面二叉树的遍历也是一样,三种遍历的代码很像。

当我们满足结束的标志的时候,需要完成最后一次second(或者first 或者third)方法

(抽象理解 12345678这里我把递归形象化,完成1的操作需要完成2,完成2需要3···以此类推。那么倒回来,到8的时候结束递归,这时候需要完成8的所有操作,然后到7完成所有操作依次类推,最后回到开始递归的地方)

而三种遍历方法不同的就是,就是执行完该方法后的操做(即8(76···)的剩余的操作)。

有的是继续进行右边的遍历,有的是先打印,这就造成了打印的结果不同。

大一狗初学,有误请谅解!

时间: 2024-10-20 06:30:35

java生成二叉树和遍历的相关文章

java实现二叉树及遍历、删除

java实现二叉树及遍历.删除 个人网站:多猫影视[可以看各大网站的VIP视频]www.duomao.xyz 二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: (1)空二叉树——如图(a): (2)只有一个根结点的二叉树——如图(b): (3)只有左子树——如图(c): (4)只有右子树——如图(d): (5)完全二叉树——如图(e). 注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形.[1] 类型 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它

java实现二叉树层次遍历

public class BSTNode<T extends Comparable<T>> { T key; // 关键字(键值) BSTNode<T> left; // 左孩子 BSTNode<T> right; // 右孩子 BSTNode<T> parent; // 父结点 public BSTNode(T key, BSTNode<T> parent, BSTNode<T> left, BSTNode<T&g

用java实现二叉树的遍历算法

用java实现二叉树的遍历算法用java实现二叉树的遍历算法,编写二叉树类BinaryTree代码如下:package package2; public class BinaryTree { int data; //根节点数据BinaryTree left; //左子树BinaryTree right; //右子树 public BinaryTree(int data) //实例化二叉树类{this.data = data;left = null;right = null;} public vo

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

Java实现二叉树地遍历、求深度和叶子结点的个数

一.分析 二叉树是n个结点所构成的集合,它或为空树,或为非空树.对于非空树,它有且仅有一个根结点,且除根结点以外的其余结点分为两个互不相交的子集,分别称为左子树和右子树,它们本身又都是二叉树. 显而易见,二叉树具有递归的性质,因此表示二叉树的结点至少要包含3个域:数据域.左指针.右指针.在Java中,我们可以将二叉树的结点视为一个类,其中含有左子树地址.右子树地址和数据三个属性,每个结点即使类的实例化对象.因为二叉树的递归性质,所以我们可以通过递归来实现二叉树地求深度.求叶子结点的个数.先序.中

java实现二叉树的构建以及3种遍历方法

转载自http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下午的时间来编写代码以及介绍思路的文档生成! 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import jav

java实现二叉树的构建以及3种遍历方法(转)

转 原地址:http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下午的时间来编写代码以及介绍思路的文档生成! 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import 

Java实现二叉树的构建与遍历

转载:http://ocaicai.iteye.com/blog/1047397 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏 * * 参考资料1:http://zhidao.baidu.

【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】

[107-Binary Tree Level Order Traversal II(二叉树层序遍历II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). For example