Leikou 101.対称二分木二分木が与えられたら、それが鏡面対称であるかどうかを確認します。

  • 対称二
    分木二分木が与えられたら、それが鏡面対称であるかどうかを確認します。
    Lizouオリジナルタイトルアイコン
    オリジナルのタイトルポータルOvO

  • 反復実装
    データの一時ストレージにキューを使用します(幅検索ではなく、データコンテナーとしてのみキューを使用します〜);
    バイナリツリーのミラー対称性の条件は次のとおりです。

1.現在比較されている2つのノードの値は同じです;
2。左側のノードの左側の子は右側のノードの右側の子と等しく、左側のノードの右側の子は次のようになります。右側のノードの左側の子。
したがって、キューを使用して毎回保存します。比較する必要があるのはオブジェクトのペアであり、保存する前に判断する必要があります。現在のノードが空の場合、後続のノードは必要ありません。比較:このサイクルは終了します(次のサイクル条件の判断に直接入ります)、ノードがない場合、または2つのノードの値が等しくない場合、ツリーはすでに非対称であり、falseを返すことができます;
コードは以下の通りであります:

構造の定義:

struct TreeNode {
    
    
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode() : val(0), left(nullptr), right(nullptr) {
    
    }
      TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
    
    }
      TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
    
    }
  };

関数の実装:

class Solution {
    
    
public:
    bool isSymmetric(TreeNode* root) {
    
    
        queue<TreeNode*> que;
        que.push(root);
        que.push(root);
        while (!que.empty()) {
    
    
            TreeNode* leftNode = que.front();
            que.pop();
            TreeNode* rightNode = que.front();
            que.pop();
            if (!leftNode && !rightNode)
                continue;
                
            if(!leftNode||!rightNode||(leftNode->val!=rightNode->val))
               return false;
               
            que.push(leftNode->left);
            que.push(rightNode->right);

            que.push(leftNode->right);
            que.push(rightNode->left);

        }
        return true;
    }
};

-再帰的ディープサーチプレオーダーディープサーチを
使用します。

class Solution {
    
    
public:
    bool RecurPre(TreeNode* root1, TreeNode* root2) {
    
    
        if(!root1&&!root2)//两个节点都为空
        return true;
        if(!root1||!root2)
        return false;
        return root1->val == root2->val && RecurPre(root1->left, root2->right) && RecurPre(root1->right, root2->left);
    }

    bool isSymmetric(TreeNode* root) {
    
    
        return RecurPre(root, root);
    }
};

おすすめ

転載: blog.csdn.net/Genius_bin/article/details/113338098