0

我正在尝试编写一个代码,允许我输入一个树节点,然后指示它的前序遍历,但不明白会发生什么。我究竟做错了什么?

这是我的代码:

#include <stdio.h>
#include<iostream>
#include<queue>
#define MAX 100
#include <vector>
#include <stdlib.h>

typedef struct node {
    struct node *parent;
    struct node *left;
    struct node *right;

    int value;
} Node;

typedef struct tree {
    Node *root;
} Tree;

void findPlace(Node *_toAdd, Node *_current) {
    // set this node to the parent so we dont have to do it later (may change next recursion)
    _toAdd->parent = _current;

    // compare value of node we're adding to current node
    if(_toAdd->value < _current->value)
        // add the element to the left subtree
        if(_current->left == NULL)          // if no left subtree yet, add it right here
            _current->left = _toAdd;
        else                                        // otherwise continue recursion to left subtree
            findPlace(_toAdd, _current->left);
    else
        // add the element to the right subtree
        if(_current->right == NULL)     // if no right subtree yet, add it right here
            _current->right = _toAdd;
        else                                        // otherwise, continue recursing to the right subtree
            findPlace(_toAdd, _current->right);
}

Node *addNode(int _val, Tree* _tree) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->value = _val;

    // if the tree is empty, this is the new root
    if(_tree->root == NULL)
        _tree->root = newNode;

    // otherwise, we need to find the right place to put it
    else
        findPlace(newNode, _tree->root);

    // return reference to the node
    return newNode;
}


void preOrder(Node *);


int main() {
    // create a tree to fool around with
    Tree *myTree = (Tree *)malloc(sizeof(Tree));

    // Add some values to the tree
    addNode(7, myTree);
    addNode(3, myTree);
    addNode(7, myTree);
    addNode(11, myTree);
    addNode(6, myTree);
    addNode(8, myTree);
    addNode(12, myTree);
    addNode(0, myTree);
    addNode(2, myTree);
    addNode(9, myTree);

    printf("Pre-Order Traversal: "); preOrder(myTree->root); printf("\n");



    return 0;
}

void preOrder(Node *_root)
{
    printf("%d ", _root->value);
    if(_root->left != NULL)
        preOrder(_root->left);
    if(_root->right != NULL)
        preOrder(_root->right);
}

假设调用预购操作,它应该按该顺序打印树,但程序只是终止并且不打印任何内容,我坚持这个请帮助我,并原谅我的英语

4

1 回答 1

1

我认为你的问题是你没有任何东西阻碍程序的退出......只需使用 cin

int x;
cin >> x;

return 0;
于 2012-01-15T08:52:33.303 回答