最简单的二叉树,今天先更新这个,以后继续更新。如果错误,欢迎指出。
//简单的二叉树的基本功能实现
struct Node
{
char data;
Node *left;
Node *right;
};
Node *Create(char **str)
{
Node *s = NULL;
if(str != NULL && *str != NULL && **str != END)
{
s = new Node;
s->data = **str;
s->left = Create(&++*str);
s->right = Create(&++*str);
}
return s;
}
void Prenoder(const Node *p)
{
if(p != NULL)
{
cout<<p->data<<" ";
Prenoder(p->left);
Prenoder(p->right);
}
}
void Inorder(const Node *p)
{
if(p != NULL)
{
Inorder(p->left);
cout<<p->data<<" ";
Inorder(p->right);
}
}
void Laorder(const Node *p)
{
if(p != NULL)
{
Laorder(p->left);
Laorder(p->right);
cout<<p->data<<" ";
}
}
Node *Find_value(Node *p,char ch)
{
if(p == NULL || p->data == ch)
return p;
else
{
Node *s = Find_value(p->left,ch);
if(s == NULL)
{
s = Find_value(p->right,ch);
}
return s;
}
}
Node *Parent_once(Node *p,Node *child)
{
if(p == NULL || p->left == child || p->right == child)
return p;
else
{
Node *s = Parent_once(p->left,child);
if(s == NULL)
s = Parent_once(p->right,child);
return s;
}
}
Node *Parent(Node *p,Node *child)
{
if(p == NULL || child == NULL || p == child)
return NULL;
return Parent_once(p,child);
}
void Nice_inorder(Node *p)
{
if(p == NULL)
return ;
stack<Node *> st;
while(p != NULL || !st.empty())
{
while(p != NULL)
{
st.push(p);
p = p->left;
}
p = st.top();
st.pop();
cout<<p->data<<" ";
p = p->right;
}
}
void Nice_preorder(Node *p)
{
if(p == NULL)
return ;
stack<Node *> st;
st.push(p);
while(!st.empty())
{
p = st.top();
st.pop();
cout<<p->data<<" ";
if(p->right != NULL)
st.push(p->right);
if(p->left != NULL)
st.push(p->left);
}
}
//以下是一些测试用例
void main()
{
char *str = "abc##de##f##g#h##";
Node *p = Create(&str);
char ch = 'd';
//Nice_inorder(p);
//Nice_preorder(p);
//Node *tmp = p->left;
//Node *s = Parent(p,tmp);
//Prenoder(s);
//Node *tmp = Find_value(p,ch);
//cout<<tmp->data<<endl;
cout<<endl;
//Prenoder(p);
//Inorder(p);
//Laorder(p);
}