• 【100题】第十六题(层序打印树的节点)


    一,题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
    例如输入

           8
         /    \
        6    10
       / \     /  \
    5  7   9  11

    输出:8   6   10   5   7  9   11。

    二,分析:

            本题主要考察树的层序遍历,最常用的方法就是采用队列的形式。

            按照,根左右的形式依次将元素弹入队列中。然后取出队列头部,再将头部的左右子树弹入队列中。这样就可以层序遍历整个二叉树。有些类似树的广度优先查找。

    三,源码:

    #include "stdio.h"
    #include "malloc.h"
    #include "stack.h"
    struct node
    {
    	int data;
    	node *right;
    	node *left;
    };
    node *root;
    void insert(node *&root,int data)
    {	
    	if(root==NULL)
        {
    	    	printf("%d\n",data);   
                root=(node*)malloc(sizeof(node)); 
    	    	root->data=data;
    	        root->right=NULL;
    	        root->left=NULL;
    	}
        else
        {    
        	if(root->data<data)//要插入的数据 data大于节点 则插入右边 
                insert(root->right,data);
            else
                insert(root->left,data);
        }
    }
    node *creatTree(int a[],int n)
    {   
        int i;   	 	 	
    	for(i=0;i<n;i++)	 			    	
    	    insert(root,a[i]);	
    	return root;
    }
    
    void leveltree(node *root)//层序遍历 
    {
        if(!root)
           return;
        deque<node*> dequelist; //双端都可以插入的队列 
        dequelist.push_back(root);    //插入一个元素到队列的尾部 
    
        while(dequelist.size())
        {
          node* pnode=dequelist.front();//获取队列的头      
          dequelist.pop_front();//弹出队列的头 
          printf("data=%d\n",pnode->data);  
          if(pnode->left)
            dequelist.push_back(pnode->left);   //若有左子树,把它的左子树压入队列中
          if(pnode->right)
            dequelist.push_back(pnode->right);  //若有右子树,把它的右子树压入队列中
        }
    }
    int main()
    {
    	int a[]={8,6,5,7,10,9,11};
    	root=creatTree(a,7); 
        leveltree(root);//采用循环的方式 
    	
    	return 0;
    } 
    



  • 相关阅读:
    洛谷P3406 海底高铁[差分 贪心]
    POJ3398Perfect Service[树形DP 树的最大独立集变形]
    POJ3928Ping pong[树状数组 仿逆序对]
    UVALive
    UVALive
    http协议进阶(二)URL与资源
    http协议进阶(一)HTTP概述
    http协议基础(十)实体首部字段
    http协议基础(九)响应首部字段
    http协议基础(八)请求首部字段
  • 原文地址:https://www.cnblogs.com/secbook/p/2655046.html
Copyright © 2020-2023  润新知