二叉树的预序遍历是{8,5,9,7,1,12,4,11,3},其顺序是{9,5,1,7,12,8,4,3,11}。用它构造二叉树并执行级别顺序遍历。最后构造一个二叉搜索树(BST),从左到右依次获取在上述级别顺序遍历中出现的键值。这个BST的级别顺序遍历是什么?
这是我的解决方案:
>
从索引和预排序遍历构建树。
遍历树并查找级别顺序遍历。
public class PreAndInOrderToLevelOrderTraversal {
static class Node {
int val;
Node left;
Node right;
public Node(int val) {
this.val = val;
left = null;
right = null;
}
}
static int[] pre;
static int[] in;
static ConcurrentHashMap<Integer, Integer> map;
static Node treeRoot;
static int preIndex = 0;
public static void main(String[] args) {
map = new ConcurrentHashMap<>();
pre = new int[]{1, 2, 4, 5, 3};
in = new int[]{4, 2, 5, 1, 3};
treeRoot = buildTreeFromPreorderAndInOrder(pre, in, map);
System.out.println(treeRoot.val);
printLevelOrder();
}
public static void printLevelOrder() {
Queue<Node> queue = new LinkedList<Node>();
queue.add(treeRoot);
while (!queue.isEmpty()) {
/* poll() removes the present head.
For more information on poll() visit
http://www.tutorialspoint.com/java/util/linkedlist_poll.htm */
Node tempNode = queue.poll();
System.out.print(tempNode.val + " ");
/*Enqueue left child */
if (tempNode.left != null) {
queue.add(tempNode.left);
}
/*Enqueue right child */
if (tempNode.right != null) {
queue.add(tempNode.right);
}
}
}
private static Node buildTreeFromPreorderAndInOrder(int[] pre, int[] in, ConcurrentHashMap<Integer, Integer> map) {
// location of the item in the inorder traversal to find it quick in O(1)
for (int i = 0; i < in.length; i++) {
map.put(in[i], i);
}
return helper(in, pre, 0, pre.length - 1, map);
}
private static Node helper(int[] in, int[] pre, int inStart, int inEnd, ConcurrentHashMap<Integer, Integer> map) {
if (inStart > inEnd) return null;
int curr = pre[preIndex++];
Node tNode = new Node(curr);
if (inStart == inEnd) return tNode;
int inIndex = map.get(curr);
tNode.left = helper(in, pre, inStart, inIndex - 1, map);
tNode.right = helper(in, pre, inIndex + 1, inEnd, map);
return tNode;
}
}
我想在级别顺序遍历中打印出BST。但是我以这种奇怪的方式得到了输出。此外,我使用Java可视化工具来检查我的算法,没有线索,因为可视化工具没有说明多个实例。我在想,要么我的变量没有正确地添加到我的实例中,要么没有添加到
我试图使用队列的链表实现实现二叉搜索树的级别顺序遍历。 我已经检查了二叉查找树的实现,它是好的。队列的链表实现也是正确的。在这里,我试图访问节点并将其子节点排队。然后使用弹出函数实际访问节点。 这最终是通过递归调用完成的。当我运行以下代码时,我以不同的顺序获得输出。
我已经实现了一种方法来对一棵树(不是二叉树)进行预排序遍历。此树的每个父节点都有一个子节点数组,因此我使用的方法是: 将子节点链接到父节点“tnAA”的示例 但它只输出根节点,这种方法有什么问题? 解决方案:将children数组链接到每个parent:tnaa . setchildern(AA _ childern);
我在研究一个重建二叉查找树的函数。我正试着先用手做。 说我有:pre-10,3,5,4,15,7,8,2,9,20 in-4,5,3,15,10,20,8,7,9,20 我弄不明白。我知道10必须是根,顺序序列中10左边的所有数字都必须在右边的子树中。 那会给我 4,5,3,15 15大于10,并且为了成为二叉查找树,左子树中的所有节点应该小于根。 这是否意味着这两个序列形成了一个无效的二叉搜索树
我正在尝试对二叉树进行级别顺序遍历。但诀窍是代替正常的级别顺序遍历,我想做另一种选择。对于例如。 普通等级顺序遍历 : 我要找的是我们打印根。现在,对于每一个偶数级,我都想逆时针旋转,对于每奇数级,都会顺时针旋转: 对于这种遍历,输出应该是: 这是我到目前为止尝试的,但这产生的输出与我试图实现的输出略有不同: 该程序产生以下输出: < code>1 3 2 5 4 7 6 10 11 9 8 我需
问题内容: 请看下面我的地图 我正在按钥匙的大小顺序遍历此地图 但是,这打印出来 有没有一种方法可以按键的大小顺序打印出来,所以,我想像这样遍历这张地图 等等… 非常感谢您的帮助! 问题答案: 收集所有键,对它们进行排序,然后按键迭代地图,如下所示: