PAT1102 Invert a Binary Tree倒置二叉树

忘是亡心i 2023-05-21 05:59 38阅读 0赞

在这里插入图片描述
思路:
很常规的建树遍历问题,按照题目输入在读数据的直接建树,因为根节点不是任何结点的孩子,所以那个没有出现过的点就是根节点
本题的遍历过程比较特殊,右孩子的优先级大于左孩子对于层序遍历,只需要先判断右孩子在判断左孩子即可
同样的,对于中序遍历,应采用右孩子根左孩子的顺序

  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. using namespace std;
  5. struct node{
  6. int data;
  7. int left,right;
  8. }Node[15];
  9. vector<int> in,lv;
  10. void inorder(int root)
  11. {
  12. if(root==-1)return;
  13. inorder(Node[root].right);
  14. in.push_back(Node[root].data);
  15. inorder(Node[root].left);
  16. }
  17. void bfs(int root)
  18. {
  19. queue<node> q;
  20. q.push(Node[root]);
  21. while(!q.empty())
  22. {
  23. node it=q.front();
  24. q.pop();
  25. lv.push_back(it.data);
  26. if(it.right!=-1)q.push(Node[it.right]);
  27. if(it.left!=-1)q.push(Node[it.left]);
  28. }
  29. }
  30. int main()
  31. {
  32. int n,root;
  33. vector<int> hash(10,0);//0表示未出现过
  34. cin>>n;
  35. for(int i=0;i<n;i++)
  36. {
  37. char a,b;
  38. Node[i].data=i;
  39. cin>>a>>b;
  40. if(a!='-')
  41. {
  42. Node[i].left=a-'0';
  43. hash[a-'0']=1;
  44. }
  45. else Node[i].left=-1;
  46. if(b!='-')
  47. {
  48. Node[i].right=b-'0';
  49. hash[b-'0']=1;
  50. }
  51. else Node[i].right=-1;
  52. }
  53. for(int i=0;i<n;i++)
  54. {
  55. if(hash[i]==0)root=i;
  56. }
  57. inorder(root);
  58. bfs(root);
  59. for(int i=0;i<n;i++)
  60. {
  61. cout<<lv[i]<<(i!=n-1?" ":"\n");
  62. }
  63. for(int i=0;i<n;i++)
  64. {
  65. cout<<in[i]<<(i!=n-1?" ":"\n");
  66. }
  67. return 0;
  68. }

发表评论

表情:
评论列表 (有 0 条评论,38人围观)

还没有评论,来说两句吧...

相关阅读