前序遍历、中序遍历、后序遍历
前序遍历: 根节点 左子树的前序遍历结果  右子树的前序遍历结果 
中序遍历: 左子树的中序遍历结果 根节点 右子树的中序遍历结果
后序遍历: 左子树的后序遍历结果 右子树的后序遍历结果 根节点
这三种遍历方式主要用来做序列化(如保存到数组中)方便数据的传递。序列化后可以通过:
中序遍历 + 前序遍历
中序遍历 + 后序遍历
来还原二叉树结构,无法通过
前序遍历 + 后序遍历
来还原树结构,没有中序遍历是无法获取左右子树的数量!
前序遍历 (根 左 右)
//前序遍历 (根 左 右 )
void PreOrderTree(TreeNode* root, vector<int> &vecProOrder)
{
    if (root == NULL)
    {
        return;
    }
    //先输出当前根节点
    printf("%d ", root->val);
    vecProOrder.push_back(root->val);
    //左节点
    PreOrderTree(root->left, vecProOrder);
    //右节点
    PreOrderTree(root->right, vecProOrder);
}
中序遍历 (左 根 右)
//中序遍历 (左 根 右 )
void InOrderTree(TreeNode* root, vector<int>& vecInOrder)
{
	if (root == NULL)
	{
		return;
	}
	//左节点
    InOrderTree(root->left, vecInOrder);
    //先输出当前根节点
	printf("%d ", root->val);
    vecInOrder.push_back(root->val);
	//右节点
    InOrderTree(root->right, vecInOrder);
}
后序遍历 (左 右 根)
//后序遍历 (左 右  根)
void PostOrderTree(TreeNode* root, vector<int>& vecPostOrder)
{
	if (root == NULL)
	{
		return;
	}
	//左节点
    PostOrderTree(root->left, vecPostOrder);
	//右节点
    PostOrderTree(root->right, vecPostOrder);
	//先输出当前根节点
	printf("%d ", root->val);
	vecPostOrder.push_back(root->val);
}
