1935129 2023-10-01 15:05 采纳率: 16.7%
浏览 2

哪个dl帮我看看二叉树的概念

二叉排序树和平衡二叉树是同一个数据结构吗?平衡二叉树是一种特殊的二叉排序树能说明他两个是一个数据结构吗?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-01 16:06
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7443134
    • 这篇博客你也可以参考下:使用递归方式查询二叉树的深度和节点个数(二叉树的一些特殊二叉树定义)
    • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 平衡二叉树的特征平衡因子的计算小节, 巩固相关知识点
    • 除此之外, 这篇博客: 设计判断二叉树是否为二叉排序树的算法中的 设计判断二叉树是否为二叉排序树的算法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      1. bool isSortTree(TreeNode *Tree) 递归判断二叉树是否为二叉排序树,
        1.1 叶子结点返回true,即N0结点
        1.2 只有左右子树的其中一个,N1结点
        1.3 有左右子树的,N2结点
      2. 二叉排序树性质:中序遍历二叉树 得到的序列值是递增的。
      // 1、设计判断二叉树是否为二叉排序树的算法。(8分)
      #include "stdio.h"
      #include "stdbool.h"
      #include "stdlib.h"
      
      typedef struct TreeNode
      {
          int data;               //数据域
          TreeNode *left, *right; //指向其左右孩子结点
      } TreeNode;
      
      bool isSortTree(TreeNode *Tree);
      
      void showTree(TreeNode *Tree);
      int main(int argc, char const *argv[])
      {
          TreeNode Node4 = {.data = 7, .left = NULL, .right = NULL};
          TreeNode Node5 = {.data = 9, .left = NULL, .right = NULL};
          TreeNode Node6 = {.data = 11, .left = NULL, .right = NULL};
          TreeNode Node7 = {.data = 13, .left = NULL, .right = NULL};
      
          TreeNode Node2 = {.data = 8, .left = &Node4, .right = &Node5};
          // TreeNode Node2 = {.data = 8, .left = &Node5, .right = &Node4}; // No
          // TreeNode Node2 = {.data = 8, .left = NULL, .right = NULL}; // Yes
      
          TreeNode Node3 = {.data = 12, .left = &Node6, .right = &Node7};
          TreeNode Node1 = {.data = 10, .left = &Node2, .right = &Node3};
      
          showTree(&Node1);
          bool res = isSortTree(&Node1);
          printf("\n%s", res ? "yes" : "No");
          return 0;
      }
      
      bool isSortTree(TreeNode *Tree)
      {
          if (!Tree)
              return true;
          if (!Tree->left && !Tree->right)
          {
              return true;
          }
      
          if (Tree->left && !Tree->right)
          {
              if (Tree->data > Tree->left->data)
                  return true;
              else
                  return false;
          }
      
          if (Tree->right && !Tree->left)
          {
              if (Tree->data < Tree->right->data)
                  return true;
              else
                  return false;
          }
      
          if (Tree->data > Tree->left->data && Tree->data < Tree->right->data)
          {
      
              bool ll = isSortTree(Tree->left);
              bool rr = isSortTree(Tree->right);
              if (ll && rr)
              {
                  return true;
              }
              else
              {
                  return false;
              }
          }
          else
          {
              return false;
          }
      }
      
      void showTree(TreeNode *Tree)
      {
          if (Tree)
          {
              showTree(Tree->left);
              printf("%d ,", Tree->data);
              showTree(Tree->right);
          }
      }
      

      result:

      7 ,8 ,9 ,10 ,11 ,12 ,13 ,
      yes
      

      在这里插入图片描述


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月1日