码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-二叉树相关问题及解答【3】

时间:2019-09-06 22:40:37      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:demo1   orm   格式   private   http   opened   保存   lse   二叉树   

 

1,根据字符串输出一个【前,中,后,层】二叉排序树

  在某个存储介质以如下的形式保存一颗二叉树

1(2(3,4(,5)),6(7,))

技术图片

观察后发现,每个节点的格式为

X,X可以为空

或者X(Y,Z),其中X不可以为空

请输出上述二叉树的前、中、后、层遍历。

技术图片
package com.cnblogs.mufasa.demo1;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class Node{
    int l;
    int r;
    public Node(int l,int r){
        this.l=l;
        this.r=r;
    }
}

public class myTree {
    String str;
    String ans;
    Queue<Node> queue= new LinkedList<Node>();
    public myTree(String str){
        this.str=str;
    }
    public String normalOut(){
        ans="";
        int len=str.length();
        deal(0,len-1);
        return ans;
    }

    private void deal(int l,int r){
        if(l>r){
            return;
        }
        int cont=0,mid=-1;
        for(int i=l+2;i<r;i++){//示例:1(2(3,4(,5)),6(7,))
            if(str.charAt(i)==‘(‘)
                cont++;

            if(str.charAt(i)==‘,‘&& cont==0){
                mid=i;
                break;
            }

            if(str.charAt(i) == ‘)‘)
                cont--;
        }
        if(mid!=-1){
            ans=ans+str.charAt(l);//前序遍历
            deal(l+2,mid-1);
//            ans=ans+str.charAt(l);//中序遍历
            deal(mid+1,r-1);
//            ans=ans+str.charAt(l);//后续遍历
        }else {
            ans=ans+str.charAt(l);
        }
    }

    public String leveOut(){
        ans="";
        int len=str.length();
        queue.add(new Node(0,str.length()-1));
        while (queue.size()!=0){
            deal1();
        }
        return ans;
    }

    private void deal1(){
        Node pre=queue.poll();
        int l=pre.l,r=pre.r;
        if(l>r){
            return;
        }
        int cont=0,mid=-1;
        for(int i=l+2;i<r;i++){//示例:1(2(3,4(,5)),6(7,))
            if(str.charAt(i)==‘(‘)
                cont++;

            if(str.charAt(i)==‘,‘&& cont==0){
                mid=i;
                break;
            }

            if(str.charAt(i) == ‘)‘)
                cont--;
        }
        if(mid!=-1){
            ans=ans+str.charAt(l);//层级遍历
            queue.add(new Node(l+2,mid-1));
            queue.add(new Node(mid+1,r-1));
        }else {
            ans=ans+str.charAt(l);
        }
    }


    public static void main(String[] args){
        String str="1(2(3,4(,5)),6(7,))";
        myTree tree=new myTree(str);
        System.out.println(tree.normalOut());
        System.out.println(tree.leveOut());
    }
}
View Code

 

2,其他问题待

 

数据结构-二叉树相关问题及解答【3】

标签:demo1   orm   格式   private   http   opened   保存   lse   二叉树   

原文地址:https://www.cnblogs.com/Mufasa/p/11478464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!