还是老规矩上题目
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
示例 2:
输入:root = [1]
输出:["1"]
接下来上代码
void cons_paths(struct TreeNode* root,char** ss,int* stack,int top,int* returnSize){
if(root == NULL){
return;
}else{
if(root->left != NULL || root->right !=NULL){
stack[top] = root -> val;
top++;
cons_paths(root->left,ss,stack,top,returnSize);
cons_paths(root->right,ss,stack,top,returnSize);
}else{
char* s = (char*)malloc(sizeof(int) * 500);
int len = 0;
int i = 0;
for(i;i<top;i++){
len = len + sprintf(s + len,"%d->",stack[i]);
}
sprint(s+len,"%d->",root->val);
ss[(*returnSize)] = s;
(*returnSize)++;
}
}
}
char** binaryTreePaths(struct TreeNode* root, int* returnSize) {
char** ss = (char**)malloc(sizeof(char*) * 100);
*returSize = 0;
int stack[100];
cons_paths(root,ss,stack,0,returnSize);
return ss;
}
思路来源于某大佬,他大概意思是这样的,先进性一个stack 把一条路线是的所有都是传到一个stack里面 然后再一个一个拿数组里面来,先写这些,明天好好的吧全部的思路解释清楚
好厉害呀!!不愧是要考985的人呀!