gpt4 book ai didi

C++ 递归打印二叉树的问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:09 25 4
gpt4 key购买 nike

我一直在练习一些旧的 C++ 问题,为一些工作面试做准备,我目前正在尝试从数组递归构造一个二叉树,然后递归地按顺序打印它。但是,我在尝试输出结果时得到了一些奇怪的值。

问题:从数组 [4,2,5,1,3] 构造二叉树,然后创建一个打印的函数
它们递归排序。

回答:我能够打印结果,但是我的解决方案包含一些意外的 0,这些 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++ 和递归有点生疏..我希望你们能帮助我.thx

最佳答案

问题出在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 超出范围也是如此。

关于C++ 递归打印二叉树的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com