题目 边界节点的定义为:根节点,二叉树左边节点,二叉树右边节点,叶子节点 输入n和n个整数,表示节点的个数以及每个节点的层序遍历的数值。输出逆时针遍历的结果,空格隔开 代码 逆时针的遍历分为四条线。
import java. util. *;
public class Main {
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
while ( sc. hasNext ( ) ) {
int n = sc. nextInt ( ) ;
Map< Integer, Integer> memo = new HashMap < > ( ) ;
List< Integer> list = new ArrayList < > ( ) ;
for ( int i = 1 ; i <= n; i++ ) {
int nodei = sc. nextInt ( ) ;
memo. put ( i, nodei) ;
}
int layer = 0 ;
while ( ( int ) Math. pow ( 2.0 , layer) <= n) {
list. add ( memo. get ( ( int ) Math. pow ( 2 , layer) ) ) ;
layer ++ ;
}
layer -- ;
int curNode = ( int ) Math. pow ( 2 , layer) ;
while ( ( ++ curNode) <= n) {
list. add ( memo. get ( curNode) ) ;
}
curNode = ( int ) Math. pow ( 2 , layer - 1 ) + 1 ;
while ( curNode < ( int ) Math. pow ( 2 , layer) ) {
list. add ( memo. get ( curNode) ) ;
curNode ++ ;
}
curNode -- ;
while ( curNode != 3 ) {
curNode = curNode / 2 ;
list. add ( memo. get ( curNode) ) ;
}
for ( int i = 0 ; i < list. size ( ) - 1 ; i++ ) {
System. out. print ( list. get ( i) + " " ) ;
}
System. out. println ( list. get ( list. size ( ) - 1 ) ) ;
}
}
}