在二元树中查找和为某一值的所有路径
2012-08-24 21:01
204 查看
题目:输入一个整数和一棵二元树,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
答:二叉树的后序非递归遍历
运行界面如下:
建造二叉树的tree.txt如下:
答:二叉树的后序非递归遍历
#include "stdafx.h" #include <iostream> #include <fstream> #include <queue> using namespace std; typedef struct _Node { int data; struct _Node *left; struct _Node *right; bool isVisit; //后序遍历标志(非递归) _Node() { data = 0; left = NULL; right = NULL; isVisit = false; } }Node, *_PNode; #define MAXSIZE 100 //创建二叉树利用先序创建 /* 10 / \ 5 12 / \ 4 7 */ void CreateBitree(_PNode &pNode, fstream &fin) { int dat; fin>>dat; if(dat==0) { pNode = NULL; } else { pNode = new Node(); pNode->data=dat; CreateBitree(pNode->left, fin); CreateBitree(pNode->right, fin); } } //在二元树中查找和为某一值的所有路径 void FindAllPathInTree(_PNode pRoot, int num) { _PNode pTree = pRoot; _PNode s[MAXSIZE]; int path[MAXSIZE]; int top = 0; int sum = 0; while (top > 0 || NULL != pTree) { while (NULL != pTree) { s[++top] = pTree; path[top] = pTree->data; sum += pTree->data; if (NULL == pTree->left && NULL == pTree->right && sum == num) { for (int i = 1; i <= top; i++) { cout<<path[i]<<" "; } cout<<endl; } pTree = pTree->left; } if (top > 0) { pTree = s[top]; if (pTree->isVisit) { sum -= path[top]; top--; pTree = NULL; } else { pTree->isVisit = true; pTree = pTree->right; } } } } int _tmain(int argc, _TCHAR* argv[]) { fstream fin("tree.txt"); _PNode pRoot = NULL; CreateBitree(pRoot, fin); FindAllPathInTree(pRoot, 22); return 0; }
运行界面如下:
建造二叉树的tree.txt如下:
10 5 4 0 0 7 0 0 12 0 0
相关文章推荐
- 在二元树中查找和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- No4、在二元树中找出和为某一值的所有路径(树)
- (转)在二元树中找出和为某一值的所有路径,java版本
- 在二元树中找出和为某一值得所有路径
- Java实现:在二元树中找出和为某一值的所有路径
- 程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
- 每天一道算法题(9)——在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径(4)
- 在二元树中找出和为某一值的所有路径
- 微软面试之4 在二元树中找出和为某一值的所有路径(树)
- 每天一算法(在二元树中找出和为某一值的所有路径(树))
- (四)在二元树中找出和为某一值的所有路径
- 算法习题5:在二元树中找出和为某一值的所有路径
- 解题笔记(6)——在二元树中找出和为某一值的所有路径(树)
- 面试100题004--二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 面试题06:在二元树中找出和为某一值的所有路径(未完待续)
- 在二元树中找出和为某一值的所有路径