当前位置:   article > 正文

4016-二叉排序树的判定(C++,附思路)_c++判别是否是二叉排序树

c++判别是否是二叉排序树

描述

假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。

输入

多组数据,每组数据有一行。每行为一个二叉树对应的前序序列(其中‘#’表示空树)。当序列为“#”时,输入结束。

输出

每组数据输出1行,若此二叉树为二叉排序树则输出“YES”,否则输出“NO”。

输入样例 1 

  1. ba##c##
  2. ca##b##
  3. #

输出样例 1

YES
NO

思路:

这道题用到了二叉树的创建和遍历的思路,以及二叉排序树的定义,如果忘了记得先去复习!

设置一个全局变量flag用来存储该树是否是二叉排序树。

在遍历树的时候,如果该树有左右两个节点,那么比较两个节点里的data和当前根节点的data大小,只要有一个不符合大小关系就置flag=1并return,否则继续按先序遍历遍历该树的左右节点,只有其中一个叶子节点的情况同理。

最后看输出,只要flag==0就是YES,否则输出NO。

  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<stack>
  6. #include<set>
  7. #include<map>
  8. using namespace std;
  9. int flag = 0;
  10. typedef struct BNode
  11. {
  12. char data;
  13. struct BNode* lchild, * rchild;
  14. }*BTree, BNode;
  15. void Create(BTree& bt, string s, int &i)
  16. {
  17. if (s[i] == '#')
  18. bt = NULL;
  19. else
  20. {
  21. bt = new BNode;
  22. bt->data =s[i];
  23. Create(bt->lchild, s,++i);
  24. Create(bt->rchild, s,++i);
  25. }
  26. }
  27. void Traverse(BTree bt)
  28. {
  29. if (bt)
  30. {
  31. if (bt->lchild && bt->rchild)
  32. {
  33. if (bt->lchild->data > bt->data || bt->rchild->data < bt->data)
  34. {
  35. flag = 1;
  36. return;
  37. }
  38. else
  39. {
  40. Traverse(bt->lchild);
  41. Traverse(bt->rchild);
  42. }
  43. }
  44. else if (bt->lchild && !bt->rchild)
  45. {
  46. if (bt->lchild->data > bt->data)
  47. {
  48. flag = 1;
  49. return;
  50. }
  51. else Traverse(bt->lchild);
  52. }
  53. else if (!bt->lchild && bt->rchild)
  54. {
  55. if (bt->rchild->data < bt->data)
  56. {
  57. flag = 1;
  58. return;
  59. }
  60. else Traverse(bt->rchild);
  61. }
  62. }
  63. }
  64. int main()
  65. {
  66. string s;
  67. while (cin >> s && s != "#")
  68. {
  69. BTree bt;
  70. int i = -1;
  71. Create(bt, s, ++i);
  72. Traverse(bt);
  73. if (flag == 0)
  74. cout << "YES" << endl;
  75. else cout << "NO" << endl;
  76. flag = 0;
  77. }
  78. return 0;
  79. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/245813
推荐阅读
相关标签
  

闽ICP备14008679号