1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef char ElemType;
4
5 typedef struct BiNode{
6 ElemType data;
7 BiNode* lchild;
8 BiNode* rchild;
9 BiNode(ElemType data, BiNode* lchild, BiNode* rchild) {
10 this->data = data;
11 this->lchild = lchild;
12 this->rchild = rchild;
13 }
14 }*BiTree;
15
16 stack<BiTree>s;
17
18 void postorder(BiTree T){
19 BiTree p=T;
20 BiTree r=NULL;
21 while(p||!s.empty()){
22 if(p){
23 s.push(p);
24 p=p->lchild;
25 }
26 else{
27 p=s.top();
28 if(p->rchild&&p->rchild!=r)p=p->rchild;
29 else{
30 s.pop();
31 printf("%c",p->data);
32 r=p;
33 p=NULL;
34 }
35 }
36 }
37
38 }
39
40 void preorder(BiTree T){
41 while(T||!s.empty()){
42 //if(s.empty())printf("q");
43 if(T){
44 printf("%c",T->data);
45 s.push(T);
46 T=T->lchild;
47 }
48 else{
49 T=s.top();
50 s.pop();
51 T=T->rchild;
52 }
53
54
55 }
56 }
57
58 void delnode(BiTree &p){
59 if(!p->lchild)p=p->rchild;
60 else if(!p->rchild)p=p->lchild;
61 else{
62 BiTree t=p->rchild;
63 BiTree q=p;
64 while(t->lchild){
65 q=t;
66 t=t->lchild;
67 }
68 p->data=t->data;
69 if(q==p){
70 p->rchild=t->rchild;
71 //free(t);
72 }
73 else{
74 q->lchild=t->rchild;
75 t=NULL;
76 }
77 }
78 }
79
80 BiTree findnode(BiTree &T,char x){
81 if(!T||T->data==x){
82 delnode(T);
83 return T;
84 }
85 if(x<T->data)return findnode(T->lchild,x);
86 return findnode(T->rchild,x);
87 }
88
89 int main(){
90 /*BiNode* v4 = new BiNode('4', NULL, NULL);
91 BiNode* v6 = new BiNode('6', NULL, NULL);
92 BiNode* v5 = new BiNode('5', v4, v6);
93 BiNode* v1 = new BiNode('1', NULL, NULL);
94 BiNode* v3 = new BiNode('3', v1, v5);
95 BiNode* v7 = new BiNode('7', v3, NULL);*/
96 BiNode* v7 = new BiNode('7', NULL, NULL);
97 BiNode* v1 = new BiNode('1', NULL, NULL);
98 BiNode* v3 = new BiNode('3', NULL, NULL);
99 BiNode* v2 = new BiNode('2', v1, v3);
100 BiNode* v5 = new BiNode('5', NULL, NULL);
101 BiNode* v6 = new BiNode('6', v5, v7);
102 BiNode* v4 = new BiNode('4', v2, v6);
103 //BiNode* T = v4;*/
104 BiTree T=v7;
105 preorder(T);
106 printf("
");
107 findnode(T,'3');
108 preorder(T);
109 printf("
");
110 postorder(T);
111 }