一.二叉树的创建

typedef struct TreeNode
{
    char data;
    struct TreeNode *left;
    struct TreeNode *right;
}

1.C语言

void CreateTree(TreeNode **T)
{
    char data;
    scanf("%d",&data);  //输入节点数据
    if(data=='#')  
        *T=NULL; //若为#则代表该节点不存在
    else 
    {
         *T=(TreeNode *)malloc(sizeof(TreeNode)); //为该节点开辟内存
         (*T)->value=data;//为该节点赋予数据
         CreateTree(&((*T)->left));//递归 创建左子节点
         CreateTree(&((*T)->right));//递归 创建右子节点
    }
}

2.C++

void CreateTree(TreeNode * &T) // C语言采用二级指针 C++则可以使用引用来代替
/*
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
(2)可以有const指针,但是没有const引用;
(3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
(4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
(6)"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小;
(7)指针和引用的自增(++)运算意义不一样;
*/
{
    char data;
    cin>>data;
    if(data=='#')
        T=NULL;
    else 
    {
         T=new TreeNode;
         T->value=data;
         CreateTree(T->left);
         CreateTree(T->right);
    }
}

二.二叉树的三种遍历方式

二叉树定义

struct TreeNode 
{
	int val;
	TreeNode *left;
	TreeNode *right;
};

1.前序遍历

vector<int> inorderTraversal(TreeNode* root) 
{
    vector<int> Node;
    FindNode(root,Node);
    return Node;
}
void FindNode(TreeNode*root,vector<int>& Node)
{
    if(root == NULL)
        return;
    Node.push_back(root->val);
    FindNode(root->left,Node);
    FindNode(root->right,Node);
}

2.中序遍历

vector<int> inorderTraversal(TreeNode* root) 
{
    vector<int> Node;
    FindNode(root,Node);
    return Node;
}
void FindNode(TreeNode*root,vector<int>& Node)
{
    if(root == NULL)
        return;
    FindNode(root->left,Node);
    Node.push_back(root->val);
    FindNode(root->right,Node);
}

3.后序遍历

vector<int> inorderTraversal(TreeNode* root) 
{
    vector<int> Node;
    FindNode(root,Node);
    return Node;
}
void FindNode(TreeNode*root,vector<int>& Node)
{
    if(root == NULL)
        return;
    FindNode(root->left,Node);
    FindNode(root->right,Node);
    Node.push_back(root->val);
}