C++二插树和值与子树求解

using namespace std;template<typename Type>struct Node{Type data;Node *left;Node *right;Node(Type d = Type()):data(d), left(NULL), right(NULL){}};template<typename Type>class MyTree{public:MyTree(const char *str){root = NULL;flags = ‘#’;Init(root, str);}void Printf(){Printf(root);}bool IsSonTree(Type a,Type b){return IsSonTree(GetPtr(a),GetPtr(b));}Type GetValue(Type a){return GetPtr(a)->data;}NodeGetPtr(Type a){return GetPtr(root, a);}void Sum(int x)//打印和值为x的二叉树。{int ;st;//借助一个栈来实现。Sum(root, x,sum,st);}private:int t,int x,int st)//此处不能用引用传递st。{if (t == NULL){return 0;}if (t){;st.push(t);if (sum == x){while (st.empty() == false){Nodep = st.top();st.pop();cout ;}cout << endl;;//将sum设置为0,继续递归寻找其他和值等于x的路径。}if (sum > x)//如果此路大于x,则直接跳出这条路继续递归。{return 0;}Sum(t->left, x, sum, st);Sum(t->right, x, sum, st);}}bool IsSonTree(Nodet, Nodep)//判断p树是不是t树的子树。{;else{if (t == p)return Find(t, p);//每次找到一个节点相等,就进入Find函数进行递归判断看是否所有的节点都相等。bool BOOL = IsSonTree(t->left, p);if (BOOL)return BOOL;return IsSonTree(t->right, p);}return false;}bool Find(Nodet, Nodep){if (t == p)return true;if (t != NULL){bool BOOL = Find(t->left,p);if (BOOL)return true;return Find(t->right, p);}return false;}NodeGetPtr(Nodet,Type a){ta)return t;if (t){Nodetmp = GetPtr(t->left, a);if (tmp)return tmp;return GetPtr(t->right, a);}return NULL;}t){if (t != NULL){cout ;Printf(t->left);Printf(t->right);}}t, const char *&s){if (*s == flags){t = NULL;return;}else{t (*s);Init(t->left,++s);Init(t->right, ++s);}}private:Noderoot;Type flags;};int main(){MyTree<char> mt(“123##4##51##7##”);mt;}

,蚁穴虽小,溃之千里。

C++二插树和值与子树求解

相关文章:

你感兴趣的文章:

标签云: