nyoj Tree



#include<cstdio>

#include<cstring>

#include<iostream>

#include<malloc.h>

using namespace std;

typedef struct Node

{

Node * lchild,*rchild;

char value;

} Tree;

void ReBuild(char *PreOrder,char *InOrder,int TreeLen,Tree** root)

{

Tree *p;

char *LeftEnd;

if(PreOrder==NULL||InOrder==NULL||root==NULL)//检查边界条件

{

return ;

}

p=(Tree *)malloc(sizeof(Tree));//获的前序遍历的第一个节点

p->value=*PreOrder;

p->lchild=p->rchild=NULL;

*root =p;

if(TreeLen==1)

return ;//一个节点直接结束

LeftEnd=InOrder;//LeftEnd得到先序遍历根节点的值

while(*LeftEnd!=*PreOrder)//在中序遍历中找到该点的位置

{

LeftEnd++;

}

//寻求左子树的长度

int LeftLen=0;

LeftLen=(int)(LeftEnd-InOrder);

int RightLen=0;

//寻求右子树的长度

RightLen=TreeLen-LeftLen-1;

if(LeftLen>0)//重建左子树

ReBuild(PreOrder+1,InOrder,LeftLen,&(p->lchild));

if(RightLen>0)//重建 右子树,递归

ReBuild(PreOrder +LeftLen+1,InOrder+LeftLen+1,RightLen,&(p->rchild));

}

void PostOrder(Tree *p)//二叉树建完之后进行后续遍历。

{

if(p!=NULL)

{

PostOrder(p->lchild);

PostOrder(p->rchild);

cout<<p->value;

}

}

int main()

{

char a[110],b[110];

Tree *p;

while(cin>>a>>b)

{

int len=strlen(a);

ReBuild(a,b,len,&p);

PostOrder(p);

cout<<endl;

}

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 01:10:53

nyoj Tree的相关文章

POJ 1308 Is It A Tree? &amp;&amp; NYOJ 129 (树的判定+并查集)

[题目链接]click here~~ [题目大意]给定多对节点,判断所有节点能否组成一棵树 [解题思路]并查集的基本操作,定义node,edge,统计node和edge的数目,如果(edge==node-1||node==0)则可以成树 树的判定:n个节点,最多n-1条环,只有一个入度为边,不成0 的点,其他入度不大于1,不过要注意poj数据里如果1 1 0 0也会不符合要求,也就是不能自己指向自己 代码: /* Author:HRW 树的判定: n个节点,最多n-1条边 不成环 只有一个入度为

NYOJ 116 士兵杀敌 (线段树,区间和)

题目链接:NYOJ 116 士兵杀敌 士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军常常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧. 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候.须要考虑到新增的杀敌数. 输入 仅仅有一组測试数据 第一行是两个整数N,M,当中N表示士兵的个数(1<N<1000000).M表

nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板

参考博客:https://blog.csdn.net/stpeace/article/details/9067029 参考博客:https://blog.csdn.net/baidu_35643793/article/details/70792326 先放上二叉搜索树的板子 #include <iostream> using namespace std; // BST的结点 typedef struct node { int key; struct node *lChild, *rChild;

easyui js取消选中 Tree 指定节点

取消所有选中 var rootNodes = treeObject.tree('getRoots'); for ( var i = 0; i < rootNodes.length; i++) { var node = treeObject.tree('find', rootNodes[i].id); treeObject.tree('uncheck', node.target); }

Maximum Depth of Binary Tree

这道题为简单题 题目: Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 思路: 我是用递归做的,当然也可以用深搜和广搜,递归的话就是比较左右子树的深度然后返回 代码: 1 # Definition for a binary tre

538. Convert BST to Greater Tree 二叉搜索树转换为更大树

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST. Example: Input: The root of a Binary Search Tree like thi

SPOJ375 Query on a tree

https://vjudge.net/problem/SPOJ-QTREE 题意: 一棵树,每条边有个权值 两种操作 一个修改每条边权值 一个询问两点之间这一条链的最大边权 点数<=10000 多组测试数据,case<=20 Example Input: 1 3 1 2 1 2 3 2 QUERY 1 2 CHANGE 1 3 QUERY 1 2 DONE Output: 1 3 #include<cstdio> #include<iostream> #include&

POJ 1741 Tree(树的点分治,入门题)

Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21357   Accepted: 7006 Description Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v)=The min distance between node u and v.Give an in

命令-tree

tree命令 tree - list contents of directories in a tree-like format. 显示目录的层级结构: tree 命令英文理解为树的意思,其功能是创建文件列表,将目录所有文件以树状的形式列出来.linux中的tree命令默认并不会安装,所以需要通过yum install tree -y来安装此命令. [SYNOPSIS] tree [options] [directory] [OPTIONS] -L level:指定要显示的层级: -d:仅列出目