zoukankan      html  css  js  c++  java
  • PAT-1102(Invert a Binary Tree)

      题目见这里

       和1099略微相似,考察二叉树和基本的遍历,算是简单的啦,下标还充当了数据域,主要是知道要标记访问到的下标,从而确定root

    //1102:Invert a Binary Tree
    #include <cstdio>
    #include <iostream> 
    
    using namespace std;
    
    const int N = 10;
    typedef struct node{
    	int lChild,rChild;
    }Node;
    
    void Input(int &root, bool *flag, Node *node, int &n){
    	int i;
    	char left,right;
    	scanf("%d",&n);
    	getchar();
    	for(i=0;i<n;i++){
    		scanf("%c %c",&left,&right);
    		getchar();
    		if(left=='-') node[i].lChild = -1;
    		else{
    			node[i].lChild = left-'0';
    			flag[left-'0'] = true;
    		}
    		if(right=='-') node[i].rChild = -1;
    		else{
    			node[i].rChild = right-'0';
    			flag[right-'0'] = true;
    		}
    	}
    	for(i=0;i<n;i++) 
    		if(!flag[i]){
    			root = i;
    			break;
    		}  
    }
    
    void Invert(int root, Node *node){
    	if(root!=-1){
    		Invert(node[root].lChild,node);
    		Invert(node[root].rChild,node);
    		swap(node[root].lChild,node[root].rChild);
    	}
    }
    
    void LevelOrderTraverse(int root, Node *node, int n){
    	int qNode[N],tmpNode;
    	int front,rear;
    	front = rear = 0;
    	if(root==-1) return;
    	qNode[rear] = root;
    	rear ++;
    	while(front<rear){ //无'=' 
    		tmpNode = qNode[front];
    		front ++;
    		printf("%d",tmpNode);
    		if(front<n) printf(" ");
    		else printf("
    ");
    		if(node[tmpNode].lChild!=-1){
    			qNode[rear]	= node[tmpNode].lChild;
    			rear ++;
    		}
    		if(node[tmpNode].rChild!=-1){
    			qNode[rear]	= node[tmpNode].rChild;
    			rear ++;
    		}
    	}
    }
    
    void InOrderTraverse(int root, Node *node, int n){
    	static int i = 1;
    	if(root!=-1){
    		InOrderTraverse(node[root].lChild,node,n);
    		printf("%d",root);
    		if(i==n) printf("
    ");
    		else printf(" ");
    		i ++;
    		InOrderTraverse(node[root].rChild,node,n);
    	}
    }
    
    int main(){
    //	freopen("Data.txt","r",stdin);
    	Node node[N];
    	bool flag[N]={false};
    	int root,n;
    	Input(root,flag,node,n);
    	Invert(root,node);
    	LevelOrderTraverse(root,node,n);
    	InOrderTraverse(root,node,n);
    	return 0;
    }
    

         

  • 相关阅读:
    elasticsearch
    CentOS6.9安装Logstash
    CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
    openresty capture
    CentOS6.9安装socat
    CentOS挂Windows的NFS备忘
    openCV 备忘
    rabbitmq更换数据文件和日志文件的存放位置
    根据某个文件或文件夹自制rpm包
    checkinstall打包工具使用
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/7145765.html
Copyright © 2011-2022 走看看