您的位置:首页 > 其它

LeetCode Binary Tree Preorder Traversal

2016-02-02 17:46 232 查看
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().
*/
int *nums=NULL,i=0;
void preorder(struct TreeNode* root)
{
nums = (int *)realloc(nums, sizeof(int)*(i+1));
if(root){
nums[i++]=root->val;
preorder(root->left);
preorder(root->right);
}
}

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
i=0;
if(!root)
return NULL;
else{

nums=(int *)malloc(sizeof(int));
preorder(root);
*returnSize=i;
return nums;
}
}


非递归算法。

/**
* 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().
*/
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
struct TreeNode** stack=NULL,*pre=root;
*returnSize=0;
int i=0,j=0,*nums=NULL;
stack = (struct TreeNode **)malloc(sizeof(struct TreeNode *));
nums = (int *)malloc((j+1)*sizeof(int));
while(i||pre)
{
if(pre){
nums = (int *)realloc(nums, sizeof(int)*(j+1));
nums[j++]=pre->val;
*returnSize+=1;
stack = (struct TreeNode **)realloc(stack, sizeof(struct TreeNode *)*i+1);
stack[i++]=pre;
pre=pre->left;
}
else{
pre=stack[--i];
pre=pre->right;
}
}
return nums;
}


这两种方法,我基本没怎么改代码,相比于中序遍历,只是更改了读数据的顺序,具体可以细细品味。

2016/2/2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: