/*
题意:建立一棵二叉树,左子树和父节点占一个宽度,右子树另外占一个宽度!
使任意左右子树交换顺序,使得整个树的宽度最小!
思路:递归交换左右子树 !
开始写的代码复杂了,其实左右子树不用真的交换,只要返回交换与不交换最小的宽度值就好了,下次不用在查询了!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10005
using namespace std; int tree[N][];
int link[N];
int n; int dfs(int cur){
if(cur==) return ;
int aR=+dfs(tree[cur][]);//右子树的宽度
int aL=dfs(tree[cur][]);//左子树的宽度
return min(max(aR-, aL+), max(aR, aL));//aR-1是右子树变成左子树后的宽度,aL是左子树变成右子树的宽度
} int main(){
while(scanf("%d", &n)!=EOF){
memset(tree, , sizeof(tree));
memset(link, , sizeof(link));
for(int i=; i<n; ++i){
int u;
scanf("%d", &u);
if(link[u]==){
link[u]=;
tree[u][]=i+;
}
else {
tree[u][]=i+;
}
}
printf("%d\n", dfs());
}
return ;
}
 //这个就是写复杂了,但是很庆幸的过了!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10005
using namespace std; int tree[N][];
int link[N];
int n, wide; int dfs(int cur){
if(cur==) return ;
int aR=+dfs(tree[cur][]);
int aL=dfs(tree[cur][]);
return max(aL, aR);
} void updateT(int cur){
if(cur==) return;
updateT(tree[cur][]);
updateT(tree[cur][]);
int aL, aR;
aL=dfs(tree[cur][]);
aR=+dfs(tree[cur][]);
if(cur==) wide=min(max(aR-, aL+), max(aR, aL));
if(aR-aL>){
int tmp=tree[cur][];
tree[cur][]=tree[cur][];
tree[cur][]=tmp;
}
} int main(){
while(scanf("%d", &n)!=EOF){
memset(tree, , sizeof(tree));
memset(link, , sizeof(link));
for(int i=; i<n; ++i){
int u;
scanf("%d", &u);
if(link[u]==){
link[u]=;
tree[u][]=i+;
}
else {
tree[u][]=i+;
}
}
updateT();
printf("%d\n", wide);
}
return ;
}

ZOJ3805Machine(二叉树左右子树变换)的更多相关文章

  1. 剑指OFFER18 判断一个二叉树的子树

    public class a18_IsSubTree { public static boolean hasSubTree(TreeNode treeRoot1, TreeNode treeRoot2 ...

  2. 剑指Offer:面试题19——二叉树的镜像(java实现)

    问题描述: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树结点定义为: public class TreeNode { int val = 0; TreeNode left = null; Tr ...

  3. 我要好offer之 二叉树大总结

    一. 二叉树定义 二叉树具有天然的递归特性,凡是二叉树相关题,首先应该联想到递归 struct BinTreeNode { BinTreeNode* left; BinTreeNode* right; ...

  4. 轻松搞定面试中的二叉树题目(java&python)

    树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.二叉 ...

  5. php二叉树算法

    二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2^{i-1}个结点:深度为k的二叉树至多有2^k-1个结点:对任何一棵二叉树T,如 ...

  6. Data Structure 之 二叉树

          在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆 ...

  7. 二叉树-你必须要懂!(二叉树相关算法实现-iOS)

    这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...

  8. js 实现二叉树

    二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree),右边的总是大于左边的!二叉树的每个结点至多只有二棵子树(不存 ...

  9. ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)

    二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是 ...

随机推荐

  1. 如何在两个activity之间传递bitmap

    1.需求 在项目开发过程中,打印小票前需要添加打印预览功能,交易数据在打印前转成bitmap然后直接打印,为了显示这个bitmap需要将其传给显示activity. 2.解决方法 把bitmap存储为 ...

  2. mysql5.7中文乱码问题的解决,将编码统一改成utf8的方法

    修改配置文件my.ini 将其改为:(路径根据自己mysql的安装路径进行适当调整,与字符编码无关,不必改动) [mysqld] basedir=C:\MYSQL57datadir=C:\MYSQL5 ...

  3. javascriptone

    var start=Date.now();document.write("<h1>This is a paragraph.</h1>");function ...

  4. 怎样让.bat文件开机自启动

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\R ...

  5. 使用pango-Cairo列出系统中的有效字体

    使用pango-Cairo列出系统中的有效字体,代码来源于gtk-app-devel-list fonts list using pango #include <glib.h> #incl ...

  6. 【转】各种语言中的urlencode方法

    URLENCODE和URLDECODE是比较常用的URL参数转换方法,为以后使用方便,自己归类一下.   原文地址:http://blog.sina.com.cn/s/blog_3f195d25010 ...

  7. 推荐几款自己写博客使用的Ubuntu软件

    使用Ubuntu桌面有段时间,到现在也写过几篇博客了,期间用到的几款好用的软件推荐给大家.1. 图片简单编辑软件gthumbubuntu默认提供shotwell查看图片,类似与windows的图片查看 ...

  8. Javascript图表插件HighCharts用法案例

    最近还在忙着基于ABP的项目,但本篇博客和ABP无关,喜欢ABP框架的朋友请点击传送门. 这不,最近项目基本功能做的差不多了,现在在做一个数据统计的功能,需要绘制区域图(或折线图)和饼图.一开始,楼主 ...

  9. 玩转正则之highlight高亮

    程序员在编写代码的时候少不了和字符串以及“查询”打交道,两者的交集中有一个叫做正则表达式的的东西,这家伙用好了可以提高编程效率,用不好的话...你可以先去好好学一学. 关于正则的使用,举个简单的例子: ...

  10. angular ng-model类型格式转化

    在angular开发中我们经常会遇见输入框中的string的值,却想在scope上的model表现为整型.浮点.货币,或者在radio的value是一个true,false的Boolean类型,一组c ...