从父数组测试用例构造二叉树失败
Construct Binary Tree from Parent Array test case failing
问题的链接-[链接][1]
基本上,我们得到了一个整数数组及其大小。问题是从中构造一个二叉树。每个索引对应于存储在节点中的数据,该索引的值是父级的数据。根节点索引的值将始终为 -1,因为根没有父级。输出将是树的排序级别顺序遍历。
现在我的方法是将数组从 1 解析为 n(不是第 0 个元素/根节点),对于每个元素,我使用第一个函数获取它的父级,并相应地插入子元素。但是一个特定的测试用例失败了。也许网站自己的输出不正确。我将在下面发布所有内容:-
示例测试用例-
阵列大小-7
元素- -1 0 0 1 1 3 5
输出- 0 1 2 3 4 5 6
特定的测试用例(这是我的疑问)-
数组大小 - 42
元素-
3 19 1 41 35 29 27 11 17 23 9 15 33 13 39 23 19 25 21 1 33 15 31 21 5 7 37 29 7 11 31 39 -1 27 3 9 25 17 13 41 37 35网站输出 - 32
我的输出 - 0
功能
void getParent(Node* root, int val, Node* &main)
{
if(root==NULL) return;
if(root->data==val){
main=root;
return;
}
getParent(root->left,val,main);
getParent(root->right,val,main);
}
Node *createTree(int parent[], int n)
{
if(n==0) return NULL;
Node * root=new Node(0);
for(int i=1;i<n;i++)
{
Node* main=NULL;
getParent(root,parent[i],main);
//main has the parent
Node* child=new Node(i);
if(main==NULL) break;
if(main->left==NULL)
{
main->left=child;
}
else if(main->right==NULL)
{
main->right=child;
}
}
return root;
}
[1]: https://www.geeksforgeeks.org/construct-a-binary-tree-from-parent-array-representation/
[2]: https://i.stack.imgur.com/0fRmn.png
不确定你用getParent
方法做什么。此外,您正在启动一个值为 0 的根节点,并且没有在循环中对其进行任何操作,然后最后返回根。我怀疑你的根总是有一个值 0。
解决方案实际上非常简单。使用每个节点的值作为数组的索引初始化节点数组。例如,对于大小为 5 的数组,您可以创建一个包含 5 个节点的数组,每个节点都有一个其所在索引的值。
然后下一步是遍历parent
数组,看看位于parent[i]
的节点是否具有left
或right
"可用",如果是,则相应地分配节点。
代码是:
Node* createTree(int parent[], int n) {
Node** nodes = new Node*[n];
for ( int i = 0; i < n; i++ )
nodes[i] = new Node(i);
int rootIndex = 0;
for ( int i = 0; i < n; i++ ) {
if ( parent[i] == -1 ) {
rootIndex = i;
} else {
if ( nodes[parent[i]] -> left == NULL ) {
nodes[parent[i]] -> left = nodes[i];
} else if ( nodes[parent[i]] -> right == NULL ) {
nodes[parent[i]] -> right = nodes[i];
}
}
}
return nodes[rootIndex];
}
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- 带有矢量重复值的二叉树打印出来
- 签入二叉树的函数是平衡C++
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 如何计算给定数字在二叉树中出现的次数?
- 为什么我的二叉树会覆盖其根的叶子?
- 将二叉树的节点插入链表 (C++)
- 二叉树级别顺序插入 c++
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)