题目:
题意:
对于每组查询:
- 输入n 和 l,分别表示结点个数, 和待查询个数
- 当新建二叉树与初始二叉树相同时,输出Yes,否则No
- 当n = 0时,输入结束
解题思路:
Way1:对于每一个插入序列,都建树,然后模拟比较;
Way2:
- 对初始插入序列建树t1,设置结点遍历标记f = 0
- 对于每个查询序列,输入一个值就查询t1。
- 当两棵树相同时,查询每个结点的路径均相同。故对于当前查询结点a, 其查询经过的结点均应被访问过。若未访问,则当前结点应为查询结点。否则的话,两棵树就不一样。(即同一棵树中,根节点至每个结点的路径唯一)
代码:
#include<bits/stdc++.h>
using namespace std;
int n, l;
struct Node
{
int val;
int f; //标记是否访问
struct Node *left, *right;
};
//建树
void creat(struct Node * &t, int key)
{
if(t == NULL){
t =