繁体   English   中英

c++ 问题以递归方式打印二叉树

[英]c++ problem inorder printing binary tree recursively

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

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

答:我可以打印结果,但是我的解决方案包含一些意外的 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超出范围也是如此。

泰德是对的。 尝试按如下方式更改construct_tree:-
node *tmp = null;
if(num < SIZE)
{
tmp= new node();
......
}
return tmp;

你还有一个问题。 您对树排序的算法高度依赖于您访问数据的顺序。 尝试您的解决方案

int data[SIZE] = {5, 4, 3, 2, 1};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM