【发布时间】:2018-01-16 15:35:09
【问题描述】:
我正在解决 HackerEarth 问题之一。问题陈述如下,
给定一棵具有 N 个节点的完整二叉树,并且每个节点都附有一个不同的整数 ai,请找出可以将二叉树转换为二叉搜索树的最小交换次数。在一次交换中,您可以选择任意两个节点并交换它们的值。
您将获得二叉树的数组表示。树的根将位于 a[1] 根的左子节点将位于 a[2],根的右子节点将位于 a3。位于数组位置 k 的节点的左子节点将位于 a[2∗k],位于数组位置 k 的节点的右子节点将位于 a[2∗ k+1].
问题是如何将给定的数组转换为树的有序数组。我尝试了以下代码。在网上我没有找到任何链接。
static void inOrderArr(int destIndex,int index, int[] source, int[] dest) {
int leftIndex = (index ) * 2;
int rightIndex = (((index ) * 2) + 1);
if(leftIndex<source.length){
inOrderArr(destIndex,leftIndex, source,dest);
}
System.out.println(index);
dest[destIndex++] = source[index-1];
if(rightIndex<source.length){
inOrderArr(destIndex,rightIndex, source,dest);
}
}
【问题讨论】:
标签: java binary-tree binary-search-tree inorder