最简单的二叉树,今天先更新这个,以后继续更新。如果错误,欢迎指出。
//简单的二叉树的基本功能实现 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); }