4

2016-10-14  本文已影响7人  xiaoyanhan

题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树

Paste_Image.png

则打印出两条路径:10, 12和10, 5, 7。

struct TreeNode {  
  int data;  
  TreeNode * left;  
  TreeNode * right;  
};   
void printPaths(TreeNode * root, int sum) {  
  int path[MAX_HEIGHT];  
  helper(root, sum, path, 0);  
}  
void helper(TreeNode * root, int sum, int path[], int top) {  
  path[top++] = root.data;  
  sum -= root.data;  
  if (root->left == NULL && root->right==NULL) {  
    if (sum == 0) printPath(path, top);  
  } else {  
    if (root->left != NULL) helper(root->left, sum, path, top);  
    if (root->right!=NULL) helper(root->right, sum, path, top);  
  }  
  top --;  
  sum -= root.data;  
} 
上一篇下一篇

猜你喜欢

热点阅读