二元树节点的数据结构定义为:
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<vector> using namespace std; struct BiTreeNode { int m_nValue; BiTreeNode *m_pleft; BiTreeNode *m_pright; }; void addBiTreeNode(BiTreeNode *&pCurrent, int value); void printPaths(BiTreeNode *pRoot, int sum, vector<int> &path, int ¤tSum); int main() { BiTreeNode *pRoot = NULL; addBiTreeNode(pRoot, 10); addBiTreeNode(pRoot, 5); addBiTreeNode(pRoot, 4); addBiTreeNode(pRoot, 7); addBiTreeNode(pRoot, 12); vector<int> path; int sum = 22, currentSum = 0; printPaths(pRoot, sum, path, currentSum); return 0; } void addBiTreeNode(BiTreeNode *&pCurrent, int value) { if(pCurrent == NULL) { BiTreeNode *pBiTree = new BiTreeNode(); pBiTree->m_nValue = value; pBiTree->m_pleft = NULL; pBiTree->m_pright = NULL; pCurrent = pBiTree; } else { if((pCurrent->m_nValue) > value) addBiTreeNode(pCurrent->m_pleft, value); else if((pCurrent->m_nValue) < value) addBiTreeNode(pCurrent->m_pright, value); } } void printPaths(BiTreeNode *pRoot, int sum, vector<int> &path, int ¤tSum) { if(pRoot == NULL) return ; currentSum += pRoot->m_nValue; path.push_back(pRoot->m_nValue); if(pRoot->m_pleft == NULL && pRoot->m_pright == NULL) { if(sum == currentSum) { vector<int>::iterator it; for(it = path.begin(); it != path.end(); it ++) cout<<*it<<" "; cout<<endl; } } if(pRoot->m_pleft != NULL) printPaths(pRoot->m_pleft, sum, path, currentSum); if(pRoot->m_pright != NULL) printPaths(pRoot->m_pright, sum, path, currentSum); currentSum -= pRoot->m_nValue; path.pop_back(); }