数据结构-二叉树相关问题及解答
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());
2,其他问题待
以上是关于数据结构-二叉树相关问题及解答的主要内容,如果未能解决你的问题,请参考以下文章