中跟遍历,输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。

编程入门 行业动态 更新时间:2024-10-25 00:28:44

中跟遍历,输入两棵二叉树A,B,判断B是不是A的子<a href=https://www.elefans.com/category/jswz/34/1771419.html style=结构。(ps:我们约定空树不是任意一个树的子结构)。"/>

中跟遍历,输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)假设元素无重复,采用中跟遍历,不包含##这种,因为中庚遍历可以确定一颗二叉树。

解答步骤
第一步:声明结构体

struct Node{int val;Node *LC;Node *RC;Node(int k){this->val=k;LC=NULL;RC=NULL;}
};

第二步:
中跟遍历:(递归实现)迭代可以参考 blog 二叉树 先根遍历 中跟遍历 后跟遍历 迭代+递归实现代码

void inOrder(Node *root,vector<int> &a){if(root==NULL){return ;}inOrder(root->LC,a);a.push_back(root->val);
//	cout<<root->val<<" ";inOrder(root->RC,a);	
}

第三步:通过中跟遍历得到vector序列以后,进行比较。

bool HasSubtree(Node* pRoot1, Node* pRoot2)
{vector<int> a;inOrder(pRoot1,a);vector<int> b;inOrder(pRoot2,b); if(b.size()==0){return false;}int j=1;for(int i=0;i<a.size();i++){j=1;if(a[i]==b[0]){while(j<b.size()){if(b[j]==a[i+j]){j++;}else{break;}}if(j==b.size()){return true;}}}return false;
}

第四步:Main函数

int main(){Node *p=new Node(5);Node *q=new Node(2);Node *l=new Node(6);Node *k=new Node(3);Node *h=new Node(9);q->RC=k; p->LC=q;p->RC=l;q->LC=h;cout<<HasSubtree(p,q);
}

结果为1,则pRoot2是pRoot1的子树。

更多推荐

中跟遍历,输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。

本文发布于:2024-02-11 17:09:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1682182.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:结构   遍历   二叉树   ps

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!