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

Posted mufasa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-二叉树相关问题及解答相关的知识,希望对你有一定的参考价值。

 

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,其他问题待

 

以上是关于数据结构-二叉树相关问题及解答的主要内容,如果未能解决你的问题,请参考以下文章

二叉树,堆详解

二叉树相关面试题数据结构

Java实现二叉树及相关遍历方式

47期六大类二叉树面试题汇总解答

数据结构初阶第六篇——初识二叉树(二叉树的基本性质+二叉树的顺序存储结构及实现)

数据结构初阶第八篇——二叉树的链式结构(二叉树的前中和后序遍历+层序遍历+链式结构的实现+相关简单的递归问题)