LeetCode 144.二叉树的前序遍历
思路🧐:
遍历很简单,但是我们需要开空间进行值的存储,结点个数也可以用递归进行统计,开好空间就可以用数组进行值的存储,注意下标要么用全局,要么指针解引用,否则当一边子树递归完开始递归另一边子树时,下标也被重置了。
代码🔎:
int TreeSize(struct TreeNode* root) { return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1; //遍历统计结点数 } void _preorder(struct TreeNode* root, int* a,int* pi) { if(root == NULL) return; a[(*pi)++] = root->val; //pi要用指针,用变量会在递归回来时重置,导致值被覆盖 _preorder(root->left, a, pi); _preorder(root->right, a, pi); } int* preorderTraversal(struct TreeNode* root, int* returnSize) { *returnSize = TreeSize(root); int* a = (int*)malloc(*returnSize * sizeof(int)); int i = 0; _preorder(root, a, &i); return a; }