去哪儿,求问打印完全二叉树的那个题怎么做呀??

完全二叉树
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
1、根据给出的字符数组,按照下面样例的要求,构造一颗完全二叉树;
2、打印构造好的完全二叉树,打印的格式要求见样例;
3、翻转该树,而后打印翻转后的效果;
输入
输入一个不为空的字符数组
输出
打印后的完全二叉树和翻转后的二叉树(注意换行)

样例输入
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'}
样例输出


       A 
       / \ 
     /   \ 
    /     \ 
   /       \ 
   B      C 
  / \        / \ 
 /   \      /   \ 
D   E   F   G 
/
H              
       A
      / \
     /   \
    /     \
   /       \
   C       B
  / \        / \
 /   \      /   \
G   F   E   D
                   \
                  H

题目大致就是这样子,但是基本上没思路,求指教
#去哪儿#
全部评论
import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.Stack; public class Main1 { public static void main(String[] args){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){ String s = cin.nextLine(); if(s == null){ System.out.println(); System.out.println(); break; } List<Character> list = new LinkedList<Character>(); for(int i = 0; i<s.length();i++){ if(s.charAt(i) >='A' && s.charAt(i) <='Z'){ list.add(s.charAt(i)); } } int len = list.size(); int treeHeight = 0; int tempheight = len; while(tempheight > 0){ treeHeight ++; tempheight >>= 1; } int index = 0; // print original tree for(int i = 0; i<treeHeight; i++){ int space = 1<< (treeHeight-1-i); int charnum = 1<<i; //print char for(int j = 0; j<charnum && index <list.size(); j++){ printSpace(space-1); System.out.print(list.get(index)); index ++; printSpace(space); } System.out.println(); // print / and \  if(index >= list.size()){ break; } for(int j = 0; j<space/2; j++){ for(int k = 0; k<charnum; k++){ printSpace(space-2-j); System.out.print("/"); printSpace(2*j+1); System.out.print("\\"); printSpace(space-2-j+1); } System.out.println(); } } System.out.println(); // print reverse tree index = 0; for(int i = 0; i<treeHeight; i++){ int space = 1<< (treeHeight-1-i); int charnum = 1<<i; Stack<Character> stack = new Stack<Character>(); for(int j = 0; j<charnum; j++){ if(index <list.size()){ stack.push(list.get(index)); index ++; }else{ stack.push(' '); } } //print char while(!stack.isEmpty()){ printSpace(space-1); System.out.print(stack.pop()); printSpace(space); } System.out.println(); // print / and \  if(index >= list.size()){ break; } for(int j = 0; j<space/2; j++){ for(int k = 0; k<charnum; k++){ printSpace(space-2-j); System.out.print("/"); printSpace(2*j+1); System.out.print("\\"); printSpace(space-2-j+1); } System.out.println(); } } } } // print space public static void printSpace(int n){ for(int i = 0; i< n; i++){ System.out.print(" "); } } }
点赞 回复 分享
发布于 2016-09-20 22:02
请问下后端还有哪些题了?
点赞 回复 分享
发布于 2016-09-22 20:14
噢噢,谢谢,自己打印出来了,哎~
点赞 回复 分享
发布于 2016-09-20 21:50
剑指offer原题
点赞 回复 分享
发布于 2016-09-20 21:05
剑指offer原题
点赞 回复 分享
发布于 2016-09-20 21:00

相关推荐

不愿透露姓名的神秘牛友
昨天 14:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务