000
11.09.2006, 12:21 Uhr
cmos
|
Hallo, ich brauch Hilfe bei einem Binärbaum. Bisher habe ich folgenden Code.
Node.h
C++: |
#ifndef Node_h #define Node_h Node_h
class CNode { private: CNode** pChildren; char value; int key; public: CNode(int key, char value); ~CNode(void);
//set void SetChild(int index, CNode* pChild); void SetKey(int key); void SetValue(char value); void add(int key, char value);
//get int GetKey(); CNode* GetChild(int index);
};
#endif
|
Node.cpp
C++: |
#include "StdAfx.h" #include ".\node.h" #include <stdlib.h> CNode::CNode(int key, char value) { pChildren = new CNode*[2]; for(int i = 0; i < 2; i++) { pChildren[i] = NULL; } this->value = value; this->key = key; }
CNode::~CNode(void) { }
//set void CNode::SetChild(int index, CNode* pChild) { this->pChildren[index] = pChild; }
void CNode::SetKey(int key) { this->key = key; }
void CNode::SetValue(char value) { this->value = value; }
void CNode::add(int key, char value) { if(key < this->key) { } else if(key > this->key) { } }
//get CNode* CNode::GetChild(int index) { return this->pChildren[index]; }
int CNode::GetKey() { return this->key; }
|
Tree.h
C++: |
#ifndef Tree_h #define Tree_h Tree_h #include "Node.h"
class CTree { private: CNode* pRoot; public: CTree(void); ~CTree(void);
void Add(int key, char value); };
#endif
|
Tree.cpp
C++: |
#include "StdAfx.h" #include ".\tree.h" #include <stdlib.h>
CTree::CTree(void) { pRoot = NULL; }
CTree::~CTree(void) { }
void CTree::Add(int key, char value) { if(pRoot == NULL) { this->pRoot = new CNode(key, value); return true; } else { } }
|
Ich habe noch ein paar Verständnisprobleme. Wenn pRoot NULL ist, dann existiert kein Baum, also muss ich einen anlegen. Wenn eine Wurzel bereits existiert, was dann ? Kann ich dann schreiben
C++: |
this->pRoot->add(key, value); //???
|
Dies würde dann unter Node die Methode add aufrufen. In der Add MEthode muss ich überprüfen ob der neue Schlüssel größer als schon ein vorhandener ist, richtig ? Denn die kleineren Werte stehen immer auf der linken Seite und die größeren verlaufen auf der rechten. Wenn ich die Keys mit den shcon vorhandenen überprüft habe, müsste ich doch eigentlich noch wissen ob bereits einträge darin vorliegen ?
Geht das so
C++: |
if(key < this->key) { this->pChildren[0]->add(key, value) } else if(key > this->key) { this->pChildren[1]->add(key, value) }
|
für mich hat es den Anschein, als sei das Rekursiv. Wenn der Key bsp.weise kleiner ist dann setzt er den key und wert an pChildren[0], wenn nicht an die [1].
Aber irgendwas fehlt bestimmt noch und ich habe ein PRoblem das komplett nachzuvollziehen.
Danke, cmos |