二叉树的前序、中序、后序遍历
二叉树的前序、中序、后序遍历其实可以总结为一个模板,在使用的时候不需要死记硬背,了解具体的遍历过程后,只需要代入即可。
最重要的是这几句话的顺序
以后序遍历顺序为例,将第3句取值语句放在最后就是后序遍历,放在1和2中间就是中序遍历,放在最前面就是前序遍历。
postOrder(node->left, a);//1
postOrder(node->right, a);//2
a[count++] = node->val;//3
前序遍历
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
static int count = 0;
static int a[101] = {0};//这里是因为题目规定了树中节点<=100
void searchPreTree(struct TreeNode* root, int* a){
if(root != NULL){
a[count++] = root->val;
searchPreTree(root->left, a);
searchPreTree(root->right, a);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
// write code here
searchPreTree(root, a);
*returnSize = count;
return a;
}
中序遍历
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
static int a[1001] = {0};
static int count = 0;
void inorder(struct TreeNode* node, int* a){
if(node != NULL){
inorder(node->left, a);
a[count++] = node->val;
inorder(node->right, a);
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize ) {
// write code here
struct TreeNode* node = root;
inorder(node, a);
*returnSize = count;
return a;
}
后序遍历
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
static int count = 0;
static int a[101] = {0};
void postOrder(struct TreeNode* node, int* a){
if(node != NULL){
postOrder(node->left, a);
postOrder(node->right, a);
a[count++] = node->val;
}
}
int* postorderTraversal(struct TreeNode* root, int* returnSize ) {
// write code here
struct TreeNode* node = root;
postOrder(node, a);
*returnSize = count;
return a;
}