Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
/* use recursion to traverse every node(DFS),the variable 'i' is important here! * use 'path[]' to save the current path * use 'i' to show current node's position of the path[] */ void pathRecur(struct TreeNode *root, char *path, int i, char **retArr, int *numArr){ int j; j = sprintf(path + i, "%s", "->"); i += j; j = sprintf(path + i, "%d", root -> val); i += j; if(root -> left == NULL && root -> right == NULL){ retArr[*numArr] = (char *)malloc(sizeof(char) * (i - 1)); sprintf(retArr[*numArr], "%s", path + 2); *numArr += 1; } if(root -> left != NULL){ /* 'i' wouldn't change in the function,thus guarantee another root-to-leaf * path[] starts at the right place as it continues to check right subtree */ pathRecur(root -> left, path, i, retArr, numArr); } if(root -> right != NULL){ pathRecur(root -> right, path, i, retArr, numArr); } } char** binaryTreePaths(struct TreeNode* root, int* returnSize) { if(root == NULL){ *returnSize = 0; return NULL; } char **retArr =(char **)malloc(sizeof(char *) * 1000); int numArr = 0; char path[1000]; int i = 0; pathRecur(root, path, i, retArr, &numArr); *returnSize = numArr; return retArr; }