• 【数据结构与算法】--二叉树OJ题


    单值二叉树

    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

    只有给定的树是单值二叉树时,才返回 true;否则返回 false。

    示例 1:

    输入:[1,1,1,1,1,null,1]
    输出:true
    示例 2:

    输入:[2,2,2,5,2]
    输出:false
     

    提示:

    给定树的节点数范围是 [1, 100]。
    每个节点的值都是整数,范围为 [0, 99] 。

    题解:这里注意每次进行递归的时候判断,父亲结点是否与孩子结点相等,若不相等可直接返回false。

    1. bool isUnivalTree(struct TreeNode* root){
    2. if(root==NULL)
    3. {
    4. return true;
    5. }
    6. if(root->left!=NULL&&root->val!=(root->left)->val)
    7. {
    8. return false;
    9. }
    10. if(root->right!=NULL&&root->val!=(root->right)->val)
    11. {
    12. return false;
    13. }
    14. return isUnivalTree(root->left)&&isUnivalTree(root->right);
    15. }

     

     相同的树

    相同的树https://leetcode.cn/problems/same-tree/

    你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

    示例 1:


    输入:p = [1,2,3], q = [1,2,3]
    输出:true
    示例 2:


    输入:p = [1,2], q = [1,null,2]
    输出:false
    示例 3:


    输入:p = [1,2,1], q = [1,1,2]
    输出:false

    提示:

    两棵树上的节点数目都在范围 [0, 100] 内
    -104 <= Node.val <= 104

     题解

    1. bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    2. if(p==NULL&&q==NULL)
    3. {
    4. return true;
    5. }
    6. if(p==NULL||q==NULL)
    7. {
    8. return false;
    9. }
    10. if(p->val!=q->val)
    11. {
    12. return false;
    13. }
    14. return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);

    二叉树的前序遍历

    二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/

    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

    示例 1:


    输入:root = [1,null,2,3]
    输出:[1,2,3]
    示例 2:

    输入:root = []
    输出:[]
    示例 3:

    输入:root = [1]
    输出:[1]
    示例 4:


    输入:root = [1,2]
    输出:[1,2]
    示例 5:


    输入:root = [1,null,2]
    输出:[1,2]

    提示:

    树中节点数目在范围 [0, 100] 内
    -100 <= Node.val <= 100

    题解

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * struct TreeNode *left;
    6. * struct TreeNode *right;
    7. * };
    8. */
    9. /**
    10. * Note: The returned array must be malloced, assume caller calls free().
    11. */
    12. int TreeSize(struct TreeNode* root)
    13. {
    14. if(root==NULL)
    15. {
    16. return 0;
    17. }
    18. return TreeSize(root->left)+TreeSize(root->right)+1;
    19. }
    20. void preorder(struct TreeNode* root,int* array,int* i)
    21. {
    22. if(root==NULL)
    23. {
    24. return;
    25. }
    26. array[*i]=root->val;
    27. (*i)++;
    28. preorder(root->left,array,i);
    29. preorder(root->right,array,i);
    30. }
    31. int* preorderTraversal(struct TreeNode* root, int* returnSize){
    32. int n=TreeSize(root);
    33. int* array=(int*)malloc(sizeof(int)*n);
    34. *returnSize=n;
    35. int i=0;
    36. preorder(root,array,&i);
    37. return array;
    38. }

     

    另一棵树的子树

     另一棵树的子树https://leetcode.cn/problems/subtree-of-another-tree/

    给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

    二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

    示例 1:


    输入:root = [3,4,5,1,2], subRoot = [4,1,2]
    输出:true
    示例 2:


    输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
    输出:false

    提示:

    root 树上的节点数量范围是 [1, 2000]
    subRoot 树上的节点数量范围是 [1, 1000]
    -104 <= root.val <= 104
    -104 <= subRoot.val <= 104

    题解

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * struct TreeNode *left;
    6. * struct TreeNode *right;
    7. * };
    8. */
    9. isSameSubtree(struct TreeNode* p,struct TreeNode* q)
    10. {
    11. if(p==NULL&&q==NULL)
    12. {
    13. return true;
    14. }
    15. if(p==NULL||q==NULL)
    16. {
    17. return false;
    18. }
    19. if(p->val!=q->val)
    20. {
    21. return false;
    22. }
    23. return isSameSubtree(p->left,q->left)&&isSameSubtree(p->right,q->right);
    24. }
    25. bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    26. if(root==NULL)
    27. {
    28. return false;
    29. }
    30. if(isSameSubtree(root,subRoot))
    31. {
    32. return true;
    33. }
    34. return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
    35. }

     

  • 相关阅读:
    最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
    Java8 Stream流如何操作集合,一文带你了解!
    7.Xaml Image控件
    聊聊 React 中被低估的 useSyncExternalStore Hooks
    智能运维应用之道,告别企业数字化转型危机
    【Kafka源码分析】二、服务端Server
    《Effective C++》《构造/析构/赋值运算——9、绝不在构造和析构过程中调用virtual函数》
    当promise遇上generator该如何应对?记一次工作中遇到的问题
    [附源码]java毕业设计校园闲置物品租赁系统
    从飞天到倚天 阿里云底层自研技术大爆发
  • 原文地址:https://blog.csdn.net/weixin_67900732/article/details/126447123