Обход бинарного дерева в C ++ - PullRequest
0 голосов
/ 02 марта 2012

Я решил это решение самостоятельно, пожалуйста, проверьте мой код «друзья».

Я сделал несколько изменений в своем коде.

проверьте мою программу, я получил вывод при отладке кода в IDE netbeans моего ноутбука ...

изменения сделаны в моих вызовах функций, и я создаю свой конструктор.

  #include <iostream>
1.#include <cstdlib>
2.#include <stdio.h>
3
4.using namespace std;
5
6.class binaryTreeTraversal
7.{
8.public:
9.int TreeNodes[2^5];
10.int size;
   int number;
   int depth;
11.binaryTreeTraversal(void);
12.bool LeafNode(int node);
13.int RootNode(int node);
14.int LeftPtr(int node);
15.int RightPtr(int node);
16.
17.int length();
18.int preOrderTraversal(int);
19.int inOrderTraversal(int);
20.int postOrderTraversal(int);
21.};  

//build the constructor
binaryTreeTraversal::binaryTreeTraversal():size(sizeof(TreeNodes)/sizeof(int)),number(0),depth(0)
{
for(int i = 0; i < size; ++i)
{
    TreeNodes[i] = -1;
}
}
22.bool binaryTreeTraversal::LeafNode(int node)
23.{
24.return LeftPtr(node) == -1 && RightPtr(node) == -1;
25.}
26.int binaryTreeTraversal::RootNode(int node)
27.{

29.root = (node-1)/2;

34.return (root >= size || TreeNodes[root] == -1)? -1 : root;
35.}
36.int binaryTreeTraversal::LeftPtr(int node)
37.{

39.left = (node-1)*2-1;

44.return (root >= size || TreeNodes[root] == -1)? -1 : root;
45.} 
46.int binaryTreeTraversal::RightPtr(int node)
47.{

49.right = (node-1)*2;

54.return (root >= size || TreeNodes[root] == -1)? -1 : root;
55.}
56.int binaryTreeTraversal::preOrderTraversal(int node)
57.{
58.if(node == -1)
59.{
60.    return (-1);
61.    cout<<"The Tree Nodes are:"<<node<<" = "<<TreeNodes[node]<<' ';
63.}
64.preOrderTraversal(LeftPtr(node));
65.preOrderTraversal(RightPtr(node));
66.}
67.int binaryTreeTraversal::inOrderTraversal(int node)
68.{
69.if(node == -1)
70.{
71.    return (-1);
72.    inOrderTraversal(LeftPtr(node));
73.}
74.cout<<"The Tree Nodes are:"<<node<<" = "<<TreeNodes[node]<<' ';
75.inOrderTraversal(RightPtr(node));
76.}
77.int binaryTreeTraversal::postOrderTraversal(int node)
78.{
79.if(node == -1)
80.{
81.    return (-1);
82.    postOrderTraversal(LeftPtr(node));
83.}
84.postOrderTraversal(RightPtr(node));
85.cout<<"The Tree Nodes are:"<<node<<" = "<<TreeNodes[node]<<' ';
86.}
87.int binaryTreeTraversal::length()
88.{
89.return depth;
90.}
91.int main(int argc, char** argv) 
92.{
93.binaryTreeTraversal btt;
94.btt.size = 13;
95.btt.TreeNodes[0] = 27;
96.btt.TreeNodes[1] = 12;
97.btt.TreeNodes[2] = 3;
98.btt.TreeNodes[3] = 8;
99.btt.TreeNodes[4] = 43;
100.btt.TreeNodes[5] = 9;
101.btt.TreeNodes[6] = 7;
102.btt.TreeNodes[7] = 61;
103.btt.TreeNodes[8] = 38;
104.btt.TreeNodes[9] = 65;
105.btt.TreeNodes[10] = 99;
106.btt.TreeNodes[11] = 77;
107.btt.TreeNodes[12] = 22;
108.cout<<"The Left-ChildNode of 9 is: \n\n"<<btt.LeftPtr(9)<<' ';
109.cout<<"The node 12 is LeafNode: \n\n"<<btt.LeafNode(12)<<' ';
110.cout<<"The node 6 is LeafNode: \n\n"<<btt.LeafNode(6)<<' ';
111.cout<<"The RootNode of 10 is: \n\n"<<btt.RootNode(10)<<' ';
112.cout<<"The preOrderTraversal values are: \n\n"<<btt.preOrderTraversal(0)<<' ';
113.cout<<"The inOrderTraversal values are: \n\n"<<btt.inOrderTraversal(0)<<' ';
114.cout<<"The postOrderTraversal values are: \n\n"<<btt.postOrderTraversal(0)<<' ';
115.return (0);
116.}

1 Ответ

1 голос
/ 02 марта 2012

Я не уверен, о чем говорится в строке 31, но когда я компилирую ваш код, в строке 24 сообщается об ошибке, которая недействительна. Строка 24:

return (binaryTreeTraversal::LeftPtr(int node) == NULL && binaryTreeTraversal::RightPtr(int node) == NULL);

и я подозреваю, что вы имеете в виду:

return (binaryTreeTraversal::LeftPtr(node) == 0 && binaryTreeTraversal::RightPtr(node) == 0);

Ошибка строки 61 в том, что вы включили stdio.h вместо iostream

Вы назвали свой вопрос "Обход бинарного дерева в c" ... Вы действительно верите, что ваш вопрос имеет какое-либо отношение к этому?

...