二叉树学习(一)普通二叉树的遍历与还原

二叉树是一种很重要的数据结构,一般的操作就是遍历和还原.
有着很多重要的应用,比如红黑树,二叉排序树(也叫二叉搜索树)查找性能很高, jdk8 hashmap是 基于红黑树实现的,如果对二叉树不了解,那么对二叉树的变形(搜索树,平衡树,堆排序)无从入手.
二叉树定义:(递归定义,这也意味着很多操作时递归进行的)
二叉树或为空树,或是由一个节根节点加上两棵分别称为左子树和右子树的,互不相交的二叉树组成
特点:

  1. 每个节点最多只有两棵子树,即节点度不大于2
  2. 子树有左右之分,不能颠倒

二叉树节点定义:BTreeNode.java

package top.forethought.trees;

import lombok.Data;

import java.util.Queue;

/**
 * @author  wangwei
 * @date     2019/2/7 14:23
 * @classDescription  二叉树节点
 *
 */
@Data
public class BTreeNode <T> {
   
    private T data;
    private BTreeNode lChild;
    private BTreeNode rChild;

    public BTreeNode(T data) {
   
        this.data = data;
        lChild=null;
        rChild=null;
    }


二叉树的生成代码:

 /**
     * @author  wangwei
     * @date     2019/2/7 14:42
     * @methodDescription   生成二叉树
     *          A
     *         /\
     *        B  C
     *       /  /\
     *      D  E F
     */
    public BTreeNode buildBinTree(){
   
       BTreeNode node=new BTreeNode('A');
        BTreeNode nodeB=new BTreeNode('B');
        BTreeNode nodeC=new BTreeNode('C');
        BTreeNode nodeD=new BTreeNode('D');
        BTreeNode nodeE=new BTreeNode('E');
        BTreeNode nodeF=new BTreeNode('F');
        nodeB.setLChild(nodeD);
        node.setLChild(nodeB);
        node.setRChild(nodeC);
        nodeC.setLChild(nodeE);
        nodeC.setRChild(nodeF);
        return node;


    }

二叉树的层序遍历

层序遍历:就是对二叉树的每层从左到右依次输出

需要借助队列实现:
思路:将根节点入队
递归:
出队,打印出队节点的值,然候将出队节点的孩子节点入队
直到队列为空,层序遍历结束

代码实现:

 /**
     *  二叉树的层序遍历:利用队列先进先出的特点实现
     * @param queue
     */
    public static void visitBinTreeByHierarchy(Queue<BTreeNode> queue){
   
        if(queue.isEmpty()){
   
            return;
        }
        BTreeNode head=  queue.remove();
        System.out.println(" 节点 data:"+head.getData());
        if(head.getLChild()!=null){
   
            queue.add(head.getLChild());
        }
        if(head.getRChild()!=null){
   
            queue.add(head.getRChild());
        }
        visitBinTreeByHierarchy(queue);
    }

测试代码:

 /**
     * @author  wangwei
     * @date     2019/2/7 14:37
     * @methodDescription  测试层序遍历:
     *    每层将节点入队,出队时,孩子入队
     *
     */
    @Test

    public void testVisitByHierarchy(){
   
        BTreeNode tree=buildBinTree(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值