数据结构(六)-二叉树

二叉树的特点是每个节点最多有两个分支,即二叉树中不存在度大于2的结点。

二叉树的遍历

  • 先序遍历(根-左-右)
  • 中序遍历(左-根-右)
  • 后续遍历(左-右-根)
package com.lq.bintree;

import java.util.ArrayList;
import java.util.List;

public class BinTree {  
    private BinTree leftChild;   //左孩子结点
    private BinTree rightChild;  //右孩子结点  
    private BinTree root;        //根节点结点  
    private Object data;        //数据域  
    private List<BinTree> datas;//存储所有的节点  
    public BinTree(BinTree leftChild, BinTree rightChild, Object data) {  
        super();  
        this.leftChild = leftChild;  
        this.rightChild = rightChild;  
        this.data = data;  
    }  
    public BinTree(Object data) {  
        this(null, null, data);  
    }  
    public BinTree() {  
        super();  
    }  
      
    public void createTree(Object[] objs){  
        datas=new ArrayList<BinTree>();  
        for (Object object : objs) {  
            datas.add(new BinTree(object));  
        }  
        root=datas.get(0);//将第一个作为根节点  
        for (int i = 0; i < objs.length/2; i++) {  
            datas.get(i).leftChild=datas.get(i*2+1);  
            if(i*2+2<datas.size()){//避免偶数的时候 下标越界  
                datas.get(i).rightChild=datas.get(i*2+2);  
            }  
        }  
    }  
    //先序遍历(递归)  
    public void preorder(BinTree root){  
        if(root!=null){  
            visit(root.getData());  
            preorder(root.leftChild);  
            preorder(root.rightChild);  
        }  
          
    }  
    //中序遍历(递归)  
    public void inorder(BinTree root){  
        if(root!=null){  
            inorder(root.leftChild);  
            visit(root.getData());  
            inorder(root.rightChild);  
        }  
          
    }  
    //后序遍历(递归)  
    public void afterorder(BinTree root){  
        if(root!=null){  
            afterorder(root.leftChild);  
            afterorder(root.rightChild);  
            visit(root.getData());  
        }  
          
    }  
    private void visit(Object obj) {  
        System.out.print(obj+" ");  
    }  
    public Object getData() {  
        return data;  
    }  
    public BinTree getRoot() {  
        return root;  
    }  
      
}  

测试

package com.lq.bintree;

public class TestTree {
     public static void main(String[] args) {  
            BinTree binTree=new BinTree();  
            Object[] objs={0,1,2,3,4,5,6,7};  
//          Object[] objs={"a","b","c","d","e","f","g","h","i","j","k","l"}; 
            binTree.createTree(objs);  
          binTree.preorder(binTree.getRoot()); //先序遍历  
//        binTree.inorder(binTree.getRoot()); //中序遍历  
//          binTree.afterorder(binTree.getRoot()); //后序遍历  
        }  

}

先序遍历的结果为:0 1 3 7 4 2 5 6

中序遍历的结果为:7 3 1 4 0 5 2 6

后序遍历的结果为:7 3 4 1 5 6 2 0

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 11,574评论 0 14
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,934评论 1 31
  • 一、树 1、 树的定义: 树(tree)是n(n>0)个节点的有限集,在任意一棵树中,(1)有且仅有一个特定的称为...
    Qi0907阅读 4,237评论 0 2
  • 1.树的定义 树是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种:(1)有且仅有一个特定的称为...
    e40c669177be阅读 8,003评论 1 14
  • 编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。 学习二叉树的意义 由于二叉树的知识更倾向于理论,所以我们在实...
    神经骚栋阅读 11,399评论 5 57