L2-011 玩转二叉树 (25分)java
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了L2-011 玩转二叉树 (25分)java,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1660字,纯文字阅读大概需要3分钟。
内容图文
![L2-011 玩转二叉树 (25分)java](/upload/InfoBanner/zyjiaocheng/613/697d879937514d118215eb43ed15ff1f.jpg)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
import java.io.BufferedInputStream;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class TreeNode {
int data;
TreeNode left, right;
}
public class Main {
public static int[] post = new int[31];
public static int[] in = new int[31];
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n = cin.nextInt();
for (int i = 0; i < n; ++i) {
in[i] = cin.nextInt();
}
for (int i = 0; i < n; ++i) {
post[i] = cin.nextInt();
}
cin.close();
TreeNode node = createTree(post, 0, in, 0, n);
cengxu(node);
}
private static void cengxu(TreeNode node) {
if(node==null)return;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(node);
boolean flag=true;
while(!queue.isEmpty()){
TreeNode cur=queue.remove();
if(flag){
System.out.print(cur.data);
flag=false;
}
else System.out.print(" "+cur.data);
if(cur.right!=null){
queue.add(cur.right);
}if(cur.left!=null){
queue.add(cur.left);
}
}
}
private static TreeNode createTree(int[] post, int i, int[] in, int i1, int n) {
if(n<=0)return null;
TreeNode tr=new TreeNode();
tr.data=post[i];
int p;
for (p = 0; p< n; ++p) {
if (in[i1 + p] == tr.data)
break;
}
tr.left = createTree(post, i+1, in, i1, p);
tr.right = createTree(post, i + p+1, in, i1 + p+1, n - p - 1);
return tr;
}
}
内容总结
以上是互联网集市为您收集整理的L2-011 玩转二叉树 (25分)java全部内容,希望文章能够帮你解决L2-011 玩转二叉树 (25分)java所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。