笔试题:求二叉树中和值为sum的所有路径
2015-08-31 20:38
323 查看
#include <iostream> #include <stack> using namespace std; struct Node { Node *left; Node *right; int data; Node(int d = int()) :data(d), left(NULL), right(NULL){} }; class DataTree { public: DataTree():root(NULL){} void Create_Tree(int VLR[],int LVR[],int n) { Create_Tree(root,VLR,LVR,n);//由数组的前序跟中序构造二叉树。 } void Printf() { Printf(root); } void Printf(Node *t) { if (t != NULL) { cout << t->data << " "; Printf(t->left); Printf(t->right); } } void GetSum(int sum)//求取和值为sum的所有路径. { //这里如果要保存,要用到栈。 stack<int> st; GetSum(st, root, sum); } private: void GetSum(stack<int> &st, Node *t, int sum) { if (t == NULL) { if (sum == 0) { stack<int> temp = st; while (temp.empty() == false) { cout << temp.top() << endl; temp.pop(); } } return ; } else { sum -= t->data; st.push(t->data); GetSum(st,t->left,sum); if (t->right!=NULL) GetSum(st,t->right,sum); st.pop(); } } void Create_Tree(Node *&t,int VLR[],int LVR[],int n) { if (n == 0)return; int i = 0; while (VLR[0] != LVR[i])i++; t = new Node(VLR[0]); Create_Tree(t->left,VLR+1,LVR,i); Create_Tree(t->right,VLR+i+1,LVR+i+1,n-i-1); } private: Node *root; }; int main() { int VLR[] = {1,2,3,4,5,6,7}; int LVR[] = {3,2,4,1,6,5,7}; DataTree dt; dt.Create_Tree(VLR,LVR,sizeof(LVR)/sizeof(int)); dt.GetSum(13); return 0; }
相关文章推荐
- courier new
- 工作小结—软硬能力
- 惠普初体验
- java单例的几种实现方法
- 【Splay】 HDU 1754 I Hate It
- LVM2详解
- 高精度计算:最大公约数【两个数字字符串】
- MySQL基本操作(三):字符集
- HDU 3008 Warcraft,动态规划,滚动数组
- 运算符/printf/scanf/if
- 设计堆栈类
- 优先队列
- Vysor 情怀玩法 (番外篇)--调戏妹子
- 语言学习目标
- JAVA中转义字符
- (4.2.16.4) ActivityManager
- js动态的在页面上增加或删除一个文本框
- 对于内存的一点笔记
- 二手车好大风,老平台都推新服务
- UNIX环境高级编程(7):文件和目录(1)