• 算法与数据结构实验题6.4 order (二叉树)


    1、题目:

    2、代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct Node
    {
    	int left;
    	int right;
    	int father;
    	int ord;
    } node[100010];
    void preOrder(int m)
    {
    	if(m!=-1)
    	{
    		cout<<m<<" ";
    		preOrder(node[m].left);
    		preOrder(node[m].right);
    	}
    }
    
    void posOrder(int m)
    {
    	if(m!=-1)
    	{
    		posOrder(node[m].left);
    		posOrder(node[m].right);
    		cout<<m<<" ";
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	int i;
    	for(i=1; i<=n; i++)
    	{
    		cin>>node[i].father;
    	}
    	for(i=1; i<=n; i++)
    	{
    		int x;
    		cin>>x;
    		node[x].ord=i;
    	}
    	for(i=1; i<=n; i++)
    	{
    		node[i].left=-1;
    		node[i].right=-1;
    	}
    	//为每个结点设置儿子 
    	for(i=1; i<=n; i++)
    	{
    		if(node[node[i].father].left==-1)
    		{
    			node[node[i].father].left=i;
    		}
    		else
    		{
    			node[node[i].father].right=i;
    		}
    	}
    	//确认左右子树,调整左右儿子位置 
    	for(i=1; i<=n; i++)
    	{
    		if(node[i].left!=-1&&node[node[i].left].ord>node[i].ord)//如果左儿子在中序中的位置大于父亲在中序的位置,
    		//说明这个应该是右儿子 
    		{
    			swap(node[i].left,node[i].right);
    		}
    		if(node[i].right!=-1&&node[node[i].right].ord<node[i].ord)//如果右儿子在中序中的位置小于父亲在中序的位置,
    		//说明这个应该是左儿子
    		{
    			swap(node[i].left,node[i].right);
    		}
    	}
    	preOrder(1);
    	cout<<endl;
    	posOrder(1);
    	cout<<endl;
    	return 0;
    }
  • 相关阅读:
    视频监控,硬盘录像机安装
    路由器、集线器和三层交换机有何不同
    九选六?九选三?
    Access数据转换为XML格式
    硬盘录像显示器显示画面有抖动感
    硬盘录像机开机监视一段时间后,显示器出现屏幕保护或者黑屏
    庆祝还活着
    天津之旅
    武汉之旅
    从今天起~~~
  • 原文地址:https://www.cnblogs.com/laixiaolian/p/6015118.html
Copyright © 2020-2023  润新知