1
私は自分自身をC++に教えるJavaプログラマです。C++バイナリツリースコープの問題を残す新しいノードのプログラミング
バイナリツリーを作成しているうちに、自分のプログラムがツリーに値を「追加」していないことがわかりました。
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
class BinaryTree {
struct Node {
public:
int val;
Node* left;
Node* right;
Node::Node(int v) {
val = v;
left = nullptr;
right = nullptr;
}
};
public:
BinaryTree() {
root = nullptr;
}
int size = 0;
int length();
bool BinaryTree::add(int v);
void printTree();
private:
void printTree(Node* n);
Node* root;
};
bool BinaryTree::add(int v) {
if (root == nullptr) {
root = new Node(v);
++size;
return true;
}
Node* ref = root;
cout << ref->val;
while (ref != nullptr) {
if (v < ref->val) {
ref = ref->left;
}
else if (v > ref->val) {
ref = ref->right;
}
else if (v == ref->val) {
return false;
}
}
Node *newNode = new Node(v);
ref = newNode;
++size;
return true;
}
void BinaryTree::printTree() {
printTree(root);
}
void BinaryTree::printTree(Node* n) {
if (n == nullptr) {
return;
}
printTree(n->left);
cout << n->val << endl;
printTree(n->right);
}
int BinaryTree::length() {
return size;
}
void main(int i) {
BinaryTree tree = BinaryTree();
tree.add(6);
tree.add(3);
tree.add(5);
tree.add(7);
tree.add(1);
tree.add(0);
tree.add(0);
tree.printTree();
cout << "binary tree sz is " << tree.length() << endl;
while (true) {};
}
なぜ、ツリーがルート以外の新しいノードをコミットしないのかに関する問題を見つけることができませんでした。
これは、新しいノードがスコープを離れると破棄されるのを防ぐため、addsメソッドに(ref = new Node)などを書き込むときにコードで "new"を使用しました。
誰でもこの問題を私に教えてもらえると大変感謝しています。
*私はC++ *自分自身を教えるJavaプログラマ午前:代わりに、限り有効です
ref->{left or right}
としてツリーをトラバース' - Javaをモデルに使って何が正しいのかを推測することで、C++を学ぶつもりはありません。 – PaulMcKenzieここでの問題は、 '新しいノード(v)'と 'ref'をリンクしていないことです。左か右かを示す 'Node *'と 'bool'を取る' Node'コンストラクタが必要です。 – GreatAndPowerfulOz
[Here](http://www.cplusplus.com/forum/general/1551/)は良いバイナリツリーの例です – GreatAndPowerfulOz