题目一:二叉树采用二叉链表存储表示。编写算法求取一棵二叉树的路径长度。(二叉树的路径长度是指从树根到树中所有结点的路径长度之和,二叉树中结点的路径长度为该结点所在层次值-1,根结点为第1层,以此类推)
树的结构声明:
typedef struct node{
char val;
struct node* left;
struct node* right;
}TreeNode,*Tree;
int PathSum(Tree& t){
if(t == NULL) return 0;
if(t->left == NULL && t->right == NULL) return 0;
int lsum = 0,rsum = 0;
if(t->left) lsum = PathSum(t->left) + 1;
if(t->right) rsum = PathSum(t->right) + 1;
return lsum + rsum;
}
题目二:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
bool hasPathSum(Tree& t,int sum){
if(t == NULL) return false;
sum -= t->val;
if(t->left == NULL && t->right == NULL)
return sum == 0;
return hasPathSum(t->left,sum) || hasPathSum(t->right,sum);
}
题目三,输出所有根到叶子的路径
char path[100]; //路径数组
void print(Tree& t,int k){ //树t,层数k
if(t == NULL) return; //t空返回
path[k] = t->val; //t->val赋值
if(!t->left && !t->right) {
for(int i = 0;i <= k;i ++) cout<<path[i];
cout<<endl;
}
print(t->left,k+1); //遍历左子树
print(t->right,k+1); //遍历右子树
}