Binärbaum ABl. Frage drei

Hallo Freunde, ich habe meinen Blog eine Weile nicht aktualisiert. Hauptsächlich, weil ich mich in dieser Zeit auf die Abschlussprüfung der Schule vorbereiten muss, daher habe ich keinen Teil meiner Zeit dem Blog gewidmet. Heute haben wir Ich werde mich weiterhin mit OJ im Zusammenhang mit der Binärbaumrekursion befassen. Was wir heute lernen werden, ist, dieselben Bäume zu beurteilen. Versuchen Sie, die Frage zu beantworten – 100, direkter Link https: //leetcode.cn/problems/same-tree/

Schauen wir uns zunächst die Frageanforderungen dieser Frage an. Wir erhalten die Wurzelknoten p und q zweier Bäume. Lassen Sie uns beurteilen, ob die beiden Bäume gleich sind. Dies ist nichts anderes als zu beurteilen, ob die entsprechenden Wurzelknoten der beiden Bäume gleich sind. Dann können wir beginnen. Beantworten Sie die Fragen. Zunächst müssen wir die Situation bestimmen, in der zwei Bäume gleichzeitig leer sind, und dann true zurückgeben, das heißt

if(p==NULL&&q==NULL)//两棵树同时为空
    {
        return true;
    }

Der Fall, in dem beide Bäume leer sind, wurde beurteilt. Was ist mit dem Fall, in dem ein Baum leer ist und der andere nicht leer ist? , es ist immer noch die gleiche Routine

 if(p==NULL||q==NULL)//只有一颗树为空
    {
        return false;
    }

Verstehen Sie, warum es so geschrieben ist? Die Voraussetzung, dass der Code dies eingeben kann, ist, dass die beiden Bäume nicht gleichzeitig leer sein können, sodass wir || verwenden können, um zu beurteilen, ob ein Baum leer ist. Wenn p == NULL ist, wird das nachfolgende q nicht beurteilt ==NULL ist. Wenn p!=NULL ist, wird q==NULL beurteilt. Solange eine der beiden Bedingungen erfüllt ist, sind die beiden Bäume nicht gleich und es wird false zurückgegeben.

Es wird festgestellt, dass der Baum leer ist. Wenn der Code weiter sinkt, bedeutet dies, dass der Baum nicht leer ist. Anschließend wird direkt beurteilt, ob der Wert von p und q gleich ist, d. h.

if(p->val!=q->val)//判断p和q的val
    {
        return false;
    }

Wenn die Werte von p und q nicht gleich sind, sind die beiden Bäume zwangsläufig unterschiedlich. Es besteht keine Notwendigkeit, weiter nach unten zu gehen, und false kann direkt zurückgegeben werden.

Weiter unten wird bewiesen, dass p und q gleich den Wurzelknoten der beiden Bäume sind. Wir können also den linken Teilbaum und den rechten Teilbaum der beiden Bäume rekursiv beurteilen

return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);//递归判断左右子树

Der Code ist hier fertig, wir führen die Übermittlung durch

 Vollständiger Code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
    {
        return true;
    }
    if(p==NULL||q==NULL)
    {
        return false;
    }
    if(p->val!=q->val)
    {
        return false;
    }
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

Supongo que te gusta

Origin blog.csdn.net/weixin_67131528/article/details/134834723
Recomendado
Clasificación