c++递归打印二叉树的顺序问题
c++ problem inorder printing binary tree recursively
我一直在练习一些老的c++问题来准备一些工作面试,我目前正在尝试从数组递归地构造一个二叉树,然后递归地打印它。然而,当我试图输出结果时,我得到了一些奇怪的值。
问题:从数组[4,2,5,1,3]构造二叉树,然后创建一个打印
的函数依次递归排列。
回答:我能够打印结果,但是我的解决方案包含一些意想不到的0,也在结果中打印。我不知道这些0是如何在打印结果中结束的。
这是我目前打印的结果(注意值之间的0):0 1 0 2 0 3 0 4 0 5 0
这是我写的c++解决方案。(只需复制粘贴并在编译器上运行):
#include <iostream>
using namespace std;
const int SIZE = 5;
struct node{
node *leftBranch;
node *rightBranch;
int val;
};
int data[SIZE] = {4,2,5,1,3};
node* construct_tree(int);
void print_tree(node*);
node * construct_tree(int num){
node *tmp = new node();
if(num < SIZE){
tmp->leftBranch = construct_tree(2*num + 1);
tmp->val = data[num];
tmp->rightBranch = construct_tree(2*num + 2);
}
return tmp;
}
int main(){
node *tree = construct_tree(0);
print_tree(tree);
return 0;
}
void print_tree(node* tree){
if(tree == NULL)
return;
print_tree(tree->leftBranch);
cout<<tree->val<<" ";
print_tree(tree->rightBranch);
}
我想我对c++和递归有点生疏了,希望你们能帮助我,谢谢
问题在construct_tree。对它的调用是:
construct_tree(0) -- from main()
construct_tree(1)
construct_tree(3)
construct_tree(7)
construct_tree(8)
construct_tree(4)
construct_tree(9)
construct_tree(10)
construct_tree(2)
construct_tree(5)
construct_tree(6)
问题是,每次调用到construct_tree创建一个新节点,添加到您的树,即使num
超出范围。
Ted是对的。尝试修改construct_tree,如下所示
node *tmp = null;
if(num < SIZE)
{
tmp= new node();
......
}
return tmp;
你有另一个问题。排序树的算法高度依赖于访问数据的顺序。在
上尝试您的解决方案int data[SIZE] = {5, 4, 3, 2, 1};
相关文章:
- 按字母顺序对C++问题中的子字符串索引进行分区
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- 如何修复关卡顺序遍历问题(二叉树)的无限循环错误
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 按顺序打印时遇到问题,二叉树的后顺序等
- 库的链接顺序问题
- 绕过 gcc 中的静态链接顺序问题
- 排序顺序问题
- 对"pthread_key_create"的未定义引用;参数顺序不能解决问题
- C++通过引用修改函数中的结构值(可能存在编译顺序问题)
- 线程内二叉树的插入或顺序遍历有什么问题
- 如何在实践中解决项目编译中链接库的顺序问题
- C++:同时避免静态初始化顺序问题和竞争条件
- 针对C++静态破坏/构建顺序问题的平台特定解决方案
- 关于评价顺序和比较的几个问题
- 同步MPI-2单向通信中的顺序问题
- c++ -构建顺序和依赖问题
- 'stringstream'参数顺序问题
- c++递归打印二叉树的顺序问题