Same Tree--LeetCode

朴灿烈づ我的快乐病毒、 2022-08-05 14:19 190阅读 0赞

题目:

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

思路:使用递归,如果不使用递归,也可以按照相同的遍历方法,记录遍历的节点,比较两个遍历的节点

  1. bool SameTree(BinTree* first,BinTree* second)
  2. {
  3. if(first==NULL && second == NULL)
  4. return true;
  5. else if(first != NULL && second == NULL)
  6. return false;
  7. else if(first == NULL && second !=NULL)
  8. return false;
  9. else
  10. {
  11. if(first->value != second->value)
  12. return false;
  13. else
  14. return SameTree(first->left,second->left)&&SameTree(first->right,second->right);
  15. }
  16. }

不使用递归也是可以解决问题的,可以考虑使用层次遍历的方法,层次遍历方法比较两个树是否相同。

  1. bool SameTree(BinTree* first,BinTree* second)
  2. {
  3. deque<BinTree*> vec;
  4. deque<BinTree*> sec;
  5. int i;
  6. vec.push_back(first);
  7. sec.push_back(second);
  8. BinTree* temp,*temp1 ;
  9. while(!vec.empty() && !sec.empty())
  10. {
  11. temp = vec.front();
  12. vec.pop_front();
  13. temp1 = sec.front();
  14. sec.pop_front();
  15. if(temp != NULL && temp1 != NULL && temp->value == temp1->value)
  16. {
  17. if(temp->left != NULL)
  18. vec.push_back(temp->left);
  19. else if(temp1->left != NULL)
  20. return false;
  21. if(temp->right != NULL)
  22. vec.push_back(temp->right);
  23. else if(temp1->right != NULL)
  24. return false;
  25. if(temp1->left != NULL)
  26. sec.push_back(temp1->left);
  27. else if(temp->left != NULL)
  28. return false;
  29. if(temp1->right != NULL)
  30. sec.push_back(temp1->right);
  31. else if(temp->right != NULL)
  32. return false;
  33. }
  34. else
  35. return false;
  36. }
  37. if(!vec.empty() || !sec.empty())
  38. return false;
  39. return true;
  40. }

发表评论

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

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

相关阅读

    相关 #100 Same Tree

    按照通过率,第三的需要买书(还是过段时间再说吧……),那么就来做第四题咯 [\100 Same Tree][100 Same Tree] 这道题同样很简单,一看就是需