重建和遍历
重建的时候,我把*看作了叶节点,但是不让其作为父节点。其他节点则可以是父节点,也可以是叶节点。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
struct _node{
char data;
int hierachy;
_node* left;
_node* right;
_node(){
data = 0;
hierachy = 0;
left = NULL;
right = NULL;
}
};
void dlt(_node* root){
stack<_node*> s_tree;
s_tree.push(NULL);
while (root){
if (root->right){
s_tree.push(root->right);
}
if (root->left){
if (root->left->data == '*'){
root->left = NULL;
root = s_tree.top(); s_tree.pop();
}
else
root = root->left;
}
else{
root = s_tree.top(); s_tree.pop();
}
}
}
void preOrder(_node* root){
stack<_node*> s_tree;
s_tree.push(NULL);
_node* tracker = root;
while (tracker){
cout << tracker->data;
if (tracker->right){
s_tree.push(tracker->right);
}
if (tracker->left){
tracker = tracker->left;
}
else{