zoukankan      html  css  js  c++  java
  • 线索二叉树

    节点类。

    因为不会使用java的enum。所以RTag和LTag就使用String凑活用吧。

    package struct;
    
    public class BiThrNode {
        private String data;
        private BiThrNode lchild;
        private BiThrNode rchild;
        private String LTag;   //Thread或null
        private String RTag;
        public String getData() {
            return data;
        }
        public void setData(String data) {
            this.data = data;
        }
        public BiThrNode getLchild() {
            return lchild;
        }
        public void setLchild(BiThrNode lchild) {
            this.lchild = lchild;
        }
        public BiThrNode getRchild() {
            return rchild;
        }
        public void setRchild(BiThrNode rchild) {
            this.rchild = rchild;
        }
        public String getLTag() {
            return LTag;
        }
        public void setLTag(String lTag) {
            LTag = lTag;
        }
        public String getRTag() {
            return RTag;
        }
        public void setRTag(String rTag) {
            RTag = rTag;
        }
        
    }

    二叉树线索化及中序遍历的方法。

    以及演示代码:

    package demo;
    
    import struct.BiThrNode;
    
    public class BiThrTree {
        //pre为全局变量
        public static BiThrNode pre;
        //中序遍历线索化
        public static void InThreading(BiThrNode p){
            if(p!=null){
                InThreading(p.getLchild());
                if(p.getLchild()==null){
                    p.setLTag("Thread");
                    p.setLchild(pre);
                }
                if(pre.getRchild()==null){
                    pre.setRTag("Thread");
                    pre.setRchild(p);
                }
                pre=p;
                InThreading(p.getRchild());
            }
        }
        
        public static void InOrderTraverse_Thr(BiThrNode T){
            BiThrNode p;
            p = T.getLchild();   //p指向根节点
            while(p != T){
                while(p.getLTag() == null){
                    p = p.getLchild();
                }
                System.out.print(p.getData() + " ");
                while(p.getRTag()=="Thread"){
                    p = p.getRchild();
                    System.out.println(p.getData() + " ");
                }
                p = p.getRchild();
            }
        }
        public static void main(String[] args){
            BiThrNode ba = new BiThrNode();
            BiThrNode bb = new BiThrNode();
            BiThrNode bc = new BiThrNode();
            BiThrNode bd = new BiThrNode();
            BiThrNode be = new BiThrNode();
            BiThrNode bf = new BiThrNode();
            BiThrNode head = new BiThrNode();
            ba.setLchild(bb);
            ba.setRchild(bc);
            bb.setLchild(bd);
            bb.setRchild(be);
            bc.setRchild(bf);
            head.setLchild(ba);
            ba.setData("A");
            bb.setData("B");
            bc.setData("C");
            bd.setData("D");
            be.setData("E");
            bf.setData("F");
            BiThrNode p = ba;
            pre = p;
            InThreading(p);
              p = head;
            InOrderTraverse_Thr(p);
        }
    }
  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/rixiang/p/4640851.html
Copyright © 2011-2022 走看看