zoukankan      html  css  js  c++  java
  • 编程之美读书笔记---分层遍历二叉树

    层序遍历一颗二叉树。给定一颗二叉树如下:

    输出结果:

    1

    2 3

    4 5 6

    7 8

    给出书上的两种实现:

    #include <iostream>
    #include <cstring>
    #include <vector>
    using namespace std;
    struct node{
    	int data;
    	node* left;
    	node* right;
    };
    void creattree(node* &root)
    {
    	root=new node;
    	root->data=1;
    	node* t2=new node;
    	t2->data=2;
    	root->left=t2;
    	node* t3=new node;
    	t3->data=3;
    	root->right=t3;
    	node* t4=new node;
    	t4->data=4;
    	t2->left=t4;
    	node* t5=new node;
    	t5->data=5;
    	t2->right=t5;
    	node* t6=new node;
    	t6->data=6;
    	t3->left=NULL;
    	t3->right=t6;
    	t6->left=t6->right=NULL;
    	t4->left=t4->right=NULL;
    	node* t7=new node;
    	t7->data=7;
    	t7->left=t7->right=NULL;
    	t5->left=t7;
    	node* t8=new node;
    	t8->data=8;
    	t8->left=t8->right=NULL;
    	t5->right=t8;
    }
    int printatlevel(node* root,int level)
    {
    	if(!root||level<0)return 0;
    	if(level==0){
    		cout<<root->data<<" ";
    		return 1;
    	}
    	return printatlevel(root->left,level-1)+printatlevel(root->right,level-1);
    }
    void printbylevel(node* root)
    {
    	for(int level=0;;level++)
    	{
    		if(!printatlevel(root,level))
    			break;
    		cout<<endl;	
    	}
    }
    void destroy(node* root)
    {
    	if(root->left==NULL&&root->right==NULL){
    		delete root;
    		return ;
    	}
    	if(root->left)destroy(root->left);
    	if(root->right)destroy(root->right);
    	delete root;
    }
    void print_new(node * root)
    {
    	if(root==NULL)
    		return ;
    	vector<node*> vec;
    	vec.push_back(root);
    	int cur=0,last=1;
    	while(cur<vec.size())
    	{
    		last=vec.size();
    		while(cur<last)
    		{
    			cout<<vec[cur]->data<<" ";
    			if(vec[cur]->left) 
    				vec.push_back(vec[cur]->left);
    			if(vec[cur]->right)
    				vec.push_back(vec[cur]->right);
    			cur++;		
    		}
    		cout<<endl;
    	}	
    }
    int main()
    {
    	node *root;
    	creattree(root);
    	//printatlevel(root,1);
    	//printbylevel(root);
    	print_new(root);
    	destroy(root);      //回收由new分配的内存
    	return 0;
    }


  • 相关阅读:
    无法设置 / 添加网络打印机?报错 无法保持设置?
    tp剩余未验证内容-5
    再谈 iptables 防火墙的 指令配置
    tp剩余未验证内容-4
    tp剩余未验证内容-3
    CentOS7.4安装配置mysql8 TAR免安装版
    CentOS7中systemctl的使用与CentOS6中service的区别
    CentOS下如何查看并杀死僵尸进程
    CentOS SVN服务器管理多项目
    swoole+Redis实现实时数据推送
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3202933.html
Copyright © 2011-2022 走看看