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);
        }
    }
  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/rixiang/p/4640851.html
Copyright © 2011-2022 走看看