树的子结构
题目
输入两颗二叉树A,B,判断B是不是A的子结构。
思路
- 首先在A树中进行遍历,找到值与B树相同的根节点
- 以A树中找到的根节点进行遍历,判断是否与B树有相同的结构
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { private: bool isSubStructureCore(TreeNode *A, TreeNode *B) { if (B == nullptr) { return true; } if (A == nullptr) { return false; } if (A->val != B->val) { return false; } return isSubStructureCore(A->left, B->left) && isSubStructureCore(A->right, B->right); } public: bool isSubStructure(TreeNode* A, TreeNode* B) { if (A == nullptr || B == nullptr) { return false; } /* 先序遍历,先遍历根,然后遍历左子树,观察是否有相同的子树,然后遍历右子树,观察是否有相同的子树 */ return isSubStructureCore(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B); } };