4.在二元树中找出和为某一值的所有路径(树) 题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树 10 / / 5 12 / \ 4 7 则打印出两条路径:10, 12和10, 5, 7。 二元树节点的数据结构定义为: struct BinaryTreeNode // a node in the binary tree { int m_nValue; // value of node BinaryTreeNode *m_pLeft; // left child of node BinaryTreeNode *m_pRight; // right child of node }; 题目没这么看清楚 二叉树定义多加了一些下次再写吧 这次复习二叉树 顺便把这题做了
#include"iostream" #include"malloc.h" using namespace std; struct tree { int data; struct tree* father; struct tree* ltree; struct tree* rtree; int s; }; typedef struct tree* next; next tree_create() { int i; static next fa=NULL; cin>>i; if(i==0) return NULL; else { next ptree=(next)malloc(sizeof(tree)); ptree->data=i; ptree->father=fa; ptree->s=0; fa=ptree; ptree->ltree=tree_create(); fa=ptree; //这里由于是static的缘故必须加 不然fa的值会因为递归tree_create()而调用中改变 检查半天 做死啊 ptree->rtree=tree_create(); return ptree; } } void zhong(next p) { if(p!=NULL) { zhong(p->ltree); cout<<p->data<<" "; zhong(p->rtree); } } void prit(next p) { if(p->father!=NULL) { prit(p->father); cout<<" - "; } cout<<p->data; } void find(next p,int number) { if(p==NULL) return ; else if(p->father==NULL) { p->s=p->data; if(p->data!=number) { find(p->ltree,number); find(p->rtree,number); } else { prit(p); } } else if(p->data+p->father->s!=number) { p->s=p->father->s+p->data; find(p->ltree,number); find(p->rtree,number); } else { prit(p); cout<<endl; } } main() { int n; next p=tree_create(); cout<<"中序遍历:"<<endl; zhong(p); cout<<endl; cout<<"输入n=:"; cin>>n; cout<<"查找路径如下:"<<endl; find(p,n); }
08-26