c++递归打印二叉树的顺序问题

c++ problem inorder printing binary tree recursively

本文关键字:顺序 问题 二叉树 递归 打印 c++      更新时间:2023-10-16

我一直在练习一些老的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};