C代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
void visit(struct TreeNode* root, int **result,int* returnSize){
if(!*result){
*result=(int *)malloc(sizeof(int));
}else{
*result=(int *)realloc(*result,((*returnSize)+1)*sizeof(int));
}
(*result)[(*returnSize)++]=root->val;
}
void preOrder(struct TreeNode* root, int **result,int* returnSize){
if(root){
visit(root,result,returnSize);
preOrder(root->left,result,returnSize);
preOrder(root->right,result,returnSize);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int *result=NULL;
preOrder(root,&result,returnSize);
return result;
}
Java代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 访问节点并存储
public void visit(TreeNode root, List<Integer> result) {
// 在Java中这个函数实现起来就省事了很多,不用像C语言那样临时分配内存
result.add(root.val);
}
// 先序
public void preOder(TreeNode root, List<Integer> result) {
if (root != null) {
visit(root, result);
preOder(root.left, result);
preOder(root.right, result);
}
}
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preOder(root, result);
return result;
}
}