572. 是否为另一棵二叉树的子树 Subtree of Another Tree

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node‘s descendants. The tree s could also be considered as a subtree of itself.

Example 1:
Given tree s:

     3
    /    4   5
  /  1   2

Given tree t:

   4
  /  1   2

Return true, because t has the same structure and node values with a subtree of s.

Example 2:
Given tree s:

     3
    /    4   5
  /  1   2
    /
   0

Given tree t:

   4
  /  1   2

Return false.

题意:判断一棵二叉树是否为另一棵二叉树的子树

解法:先序遍历二叉树,并生成字符串(用#表示孩子节点是否为null的情况),判断字符串的包含关系

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * public int val;
  5. * public TreeNode left;
  6. * public TreeNode right;
  7. * public TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11. public bool IsSubtree(TreeNode s, TreeNode t) {
  12. string s1 = Tree2String(s);
  13. string s2 = Tree2String(t);
  14. return s1.Contains(s2) || s2.Contains(s1);
  15. }
  16. static public string Tree2String(TreeNode root) {
  17. if (root == null) {
  18. return "";
  19. }
  20. StringBuilder sb = new StringBuilder();
  21. Stack<TreeNode> stack = new Stack<TreeNode>();
  22. TreeNode current = root;
  23. stack.Push(current);
  24. while (stack.Count != 0) {
  25. TreeNode popelem = stack.Pop();
  26. /**
  27. * 用#表示孩子节点是否为null的情况
  28. * 用","号分隔节点是防止"12##"和"2##"这种情况
  29. * ",12##",",2##"
  30. */
  31. if (popelem == null) {
  32. sb.Append("#");
  33. } else {
  34. sb.Append(popelem.val);
  35. }
  36. if (popelem != null) {
  37. stack.Push(popelem.right);
  38. stack.Push(popelem.left);
  39. }
  40. }
  41. return sb.ToString();
  42. }
  43. }

null

时间: 2024-10-12 17:40:49

572. 是否为另一棵二叉树的子树 Subtree of Another Tree的相关文章

比较两棵二叉树--(比较两棵二叉树是否相同/判断一棵二叉树是否是另一棵二叉树的子树)

一,问题介绍 本文章讨论两个问题: ①如何判断两棵二叉树的结构是一样的.对应的每个结点都有着相同的值.--即判断两棵二叉树是一样的 ②给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子结构 ③给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子树 注意,子结点与子树有那么一点点不同. 上面的二叉树B 是二叉树A 的子结构,但是不能说是二叉树A的子树.但是二叉树C 是 二叉树A的子树. 二,问题分析 1,如何判断两棵二叉树的结构是一样的.且对应的每个结点都有着相同的值. 对于①如何判断两棵二叉树

LeetCode 572. 另一个树的子树(Subtree of Another Tree) 40

572. 另一个树的子树 572. Subtree of Another Tree 题目描述 给定两个非空二叉树 s 和 t,检验?s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 每日一算法2019/6/12Day 40LeetCode572. Subtree of Another Tree 示例 1: 给定的树 s: 3 / 4 5 / 1 2 给定的树 t: 4 / 1 2 返回 true,因为 t

如何判断一棵二叉树树是否为另一棵二叉树的子树

#include <iostream> #include<queue> using namespace std; struct treeNode { int value; treeNode* left; treeNode* right; treeNode* parent; };//节点结构 void insert(treeNode **root,int value) { treeNode* toBe=new treeNode; toBe->value=value; toBe-

Invert a binary tree 翻转一棵二叉树

假设有如下一棵二叉树: 4  / \   2    7  / \   / \ 1  3 6  9翻转后: 4     /    \    7     2   / \    / \  9  6  3  1 这里采用递归的方法来处理.遍历结点,将每个结点的两个子结点交换位置即可. 从左子树开始,层层深入,由底向上处理结点的左右子结点:然后再处理右子树 全部代码如下: public class InvertBinaryTree { public static void main(String args

019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)

写程序在一棵二叉树中找到两个结点的最近共同祖先. 分两种情况来讨论这个题: 第一种情况结点中没有指向父结点的指针 第二种情况接种有指向父节点的指针 我们先看第一种情况,结点中没有指向父结点的指针. 我们可以采用暴力搜索每一个结点,如果这个结点的子树中 有已知的两个结点,那我们就继续沿着左右子树找,如果左子树 能找到,我们就继续沿着左子树找,如果有子树能找到,我们就 沿着右子树找,不存在两个子树都能够找到. 代码: struct TreeNode {<pre name="code"

判断一棵二叉树是不是平衡二叉树

二叉树中任意左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 两种解法. 第一种:菜鸟的解法,出现重复遍历,时间复杂度高. 1 bool IsBalanced(BinaryTreeNode* root) 2 { 3 if (root == NULL) 4 { 5 return true ; 6 } 7 int left = TreeDepth(root->m_pLeft);//该函数实现见我上一篇博客"数的深度" 8 int right = TreeDepth(root-&

编程实现判断一棵二叉树是否是平衡二叉树

Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 思路:遍历这棵二叉树,每访问

哈希(2) - 垂直打印一棵二叉树(使用哈希表实现)

垂直打印给定的一棵二叉树.下面的例子演示了垂直遍历的顺序. 1 / 2 3 / \ / 4 5 6 7 \ 8 9 对这棵树的垂直遍历结果为: 4 2 1 5 6 3 8 7 9 在二叉树系列中,已经讨论过了一种O(n2)的方案.在本篇中,将讨论一种基于哈希表的更优的方法.首先在水平方向上检测所有节点到root的距离.如果两个node拥有相同的水平距离(Horizontal Distance,简称HD), 则它们在相同的垂直线上.root自身的HD为0,右侧的node的HD递增,即+1,而左侧的

编程实现求一棵二叉树的最短树路径和最长树路径

Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. class Solution { public: int minDepth(TreeNode *root) { if(!r