List Leave

本次作业是建立二叉树并输出叶结点

(1)首先是定义结点,包括左孩子,右孩子

typedef struct
{
    int lch;//左孩子
    int rch;//右孩子 
}Node;

(2)建立二叉树

 cin>>N;
	bool check[100]={false};
	for(int i=0;i<N;i++)
	{
	cin>>x>>y;
    if(x!='-')
	{
	t[i].lch=x-'0';//字符对应数字的ASCII码与0相减,转换成整数类型
	check[t[i].lch]=true;
	 } 
	 else {t[i].lch=-1;} 
	  

  定义bool类型数组,初始为false,若t[i].lch不为‘-’,则check[t[i].lch]赋值为true

       输入左孩子,为字符型,x-‘-’与ASCII码0相减使其转化为整型,可作为check数组的下标

       右孩子则是与左孩子相同操作

for(int i=0;i<N;i++)
    {
        if(!check[i])
        {
            return i;//未出现过的数即为树的根节点 
        }
    }

用check数组找出未出现的数,该数即为根节点

  queue<int>q;//建立队
    q.push(x);//根节点所在下标入队

在遍历二叉树的函数中,是通过队先进先出的特点来对二叉树进行遍历

    if((t[temp].lch == -1) && (t[temp].rch == -1))

以上情况则为结点的左右孩子都为空,即为叶结点,可输出

若不为空,则用q.push()对结点进行入队操作

    if(t[temp].lch != -1)//左结点不为空时,入队
            q.push(t[temp].lch);
             if(t[temp].rch != -1)//右结点不为空时,入队
            q.push(t[temp].rch);

 

 

本次作业题主要是上课看老师的讲解,课后再自己进行细化,最终得出可以提交成功的代码。

觉得自己有想法,但用代码实现的能力却有限,希望多加锻炼,以此获得更大的提高。

 

posted @ 2019-04-28 00:12  刘恒盛  阅读(177)  评论(1编辑  收藏  举报