二叉树的部分代码用法,看着甚是头大。解决方法

二叉树的部分代码用法,看着甚是头大。
typedef struct TreeNode{
  char data;/*树中结点的数据是一个字符*/
  struct TreeNode *lchild;
  struct TreeNode *rchild;
}TREENODE;
int NodeNum = 0;/*统计数的结点数*/
int LeafNum = 0;/*统计数的叶子结点数*/
char ch[] = {'a', 'b', 'c', ' ', ' ', 'd', ' ', ' ', 'e',  'f', ' ', ' ', 'g', ' ', ' '};
int inc = 0;
/*建立一颗二叉树*/
int CreateBiTree(TREENODE **T)
/*按先序次序输入二叉树中结点的值,以空字符表示空树*/
{
char i;
if(ch[inc++]==' ') 
*T = NULL;
else
{
printf("%c\n",ch[inc-1]);
if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) 
return -1;
(*T)->data = ch[inc-1];
printf("%c\n",(*T)->data);
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
}

--------------------
其中下面这段
char i;
if(ch[inc++]==' ') 
*T = NULL;
else
{
printf("%c\n",ch[inc-1]);
if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) 
return -1;
(*T)->data = ch[inc-1];
printf("%c\n",(*T)->data);
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
理解不能。
ch[inc++] 这种奇怪的用法,虽然我大概知道它什么意思。还有return1、if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) return-1、ch[inc-1],不明白它为啥要这样写。接触2叉树不久,觉得理解起来很吃力。

------解决方案--------------------
我这里正好有一段自己录制的关于二叉树的视频教程,在这个共享文件夹里面:
http://pan.baidu.com/s/1eQeMSU2

楼主有空的话可以进去看看。里面还有一些其他的视频,楼主有兴趣的话也可以看看。
------解决方案--------------------

char i;
// 判断当前节点下是否有子节点,没有则此分支创建结束,返回
if(ch[inc++]==' ') 
*T = NULL;
else
{
// 输出父节点的值
printf("%c\n",ch[inc-1]);
// 给父节点分配存储空间
if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) 
// 空间分配失败,返回-1
return -1;
// 设置父节点的值
(*T)->data = ch[inc-1];
printf("%c\n",(*T)->data);
// 创建两个字节点(递归调用,以子节点作为下一个父节点,继续创建二叉树)
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;