{"id":233177,"date":"2023-02-07T14:50:00","date_gmt":"2023-02-07T11:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233177"},"modified":"2023-02-07T14:53:15","modified_gmt":"2023-02-07T11:53:15","slug":"depth-first-search-algoritm-foer-att-kontrollera-om-tvaa-uttryckstraed-aer-likvaerdiga","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/depth-first-search-algoritm-foer-att-kontrollera-om-tvaa-uttryckstraed-aer-likvaerdiga\/","title":{"rendered":"Depth First Search Algoritm f\u00f6r att kontrollera om tv\u00e5 uttryckstr\u00e4d \u00e4r likv\u00e4rdiga"},"content":{"rendered":"\n<blockquote>\n<p>Ett bin\u00e4rt uttryckstr\u00e4d \u00e4r ett slags bin\u00e4rt tr\u00e4d som anv\u00e4nds f\u00f6r att representera aritmetiska uttryck. Varje nod i ett bin\u00e4rt uttryckstr\u00e4d har antingen noll eller tv\u00e5 barn. L\u00f6vnoder (noder med 0 barn) motsvarar operander (variabler), och interna noder (noder med tv\u00e5 barn) motsvarar operatorerna. I detta problem tar vi bara h\u00e4nsyn till &#8217;+&#8217;-operatorn (dvs addition).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-154541-61e5418318d57.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-154541-61e5418318d57.jpg\" alt=\"Depth First Search Algoritm f\u00f6r att kontrollera om tv\u00e5 uttryckstr\u00e4d \u00e4r likv\u00e4rdiga\"><\/a><\/p>\n<p>uttryck-bin\u00e4rt-tr\u00e4d<\/p>\n<p>Du f\u00e5r r\u00f6tterna till tv\u00e5 bin\u00e4ra uttryckstr\u00e4d, root1 och root2. Returnera sant om de tv\u00e5 bin\u00e4ra uttryckstr\u00e4den \u00e4r ekvivalenta. Annars, returnera falskt.<\/p>\n<p>Tv\u00e5 bin\u00e4ra uttryckstr\u00e4d \u00e4r likv\u00e4rdiga om de utv\u00e4rderas till samma v\u00e4rde oavsett vad variablerna \u00e4r inst\u00e4llda p\u00e5.<\/p>\n<p>Uppf\u00f6ljning: Vad kommer du att \u00e4ndra i din l\u00f6sning om tr\u00e4det ocks\u00e5 st\u00f6der &#8217;-&#8217;-operatorn (dvs subtraktion)?<\/p>\n<p>Exempel 1:<br \/>\nIndata: rot1 = [x], rot2 = [x]<br \/>\nUtdata: sant<\/p>\n<p>Exempel 2:<br \/>\nIndata: root1 = [+,a,+,null,null,b,c], root2 = [+,+,b,c,a]<br \/>\nUtdata: sant<br \/>\nF\u00f6rklaring: a + (b + c) == (b + c) + a<\/p>\n<p>Exempel 3:<br \/>\nIndata: root1 = [+,a,+,null,null,b,c], root2 = [+,+,b,d,a]<br \/>\nOutput: false<br \/>\nF\u00f6rklaring: a + (b + c) != (b + d) + a<\/p>\n<p>Begr\u00e4nsningar:<br \/>\nAntalet noder i b\u00e5da tr\u00e4den \u00e4r lika, udda och i intervallet [1, 4999].<br \/>\nNode.val \u00e4r &#8217;+&#8217; eller en liten engelsk bokstav.<br \/>\nDet \u00e4r garanterat att det angivna tr\u00e4det \u00e4r ett giltigt bin\u00e4rt uttryckstr\u00e4d.<\/p>\n<p>Tips:<br \/>\nR\u00e4kna f\u00f6r varje variabel hur m\u00e5nga g\u00e5nger den f\u00f6rekom i det f\u00f6rsta tr\u00e4det.<br \/>\nG\u00f6r samma sak f\u00f6r det andra tr\u00e4det och kontrollera om antalet \u00e4r detsamma f\u00f6r b\u00e5da tr\u00e4den.<\/p>\n<\/blockquote>\n<h3>Depth First Search Algoritm med Hash-tabell<\/h3>\n<p>Eftersom <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-det-reguljaera-uttrycket-foer-att-ersaetta-externa-laenkar-i-wordpress-foer-seo-aendamaal\/\" title=\"uttryckstr\u00e4det\">uttryckstr\u00e4det<\/a> \u00e4r bin\u00e4rt och bara kan inneh\u00e5lla en plussymbol. D\u00e4rf\u00f6r kan vi utf\u00f6ra Depth First Search Algorithm (DFS) p\u00e5 b\u00e5da bin\u00e4ra uttryckstr\u00e4den och r\u00e4kna varje variabel. De tv\u00e5 uttryckstr\u00e4den \u00e4r lika om b\u00e5da tr\u00e4den inneh\u00e5ller samma antal variabler.<\/p>\n<pre><code>\/**\n\u00a0* Definition for a binary tree node.\n\u00a0* struct Node {\n\u00a0* \u00a0 \u00a0 char val;\n\u00a0* \u00a0 \u00a0 Node *left;\n\u00a0* \u00a0 \u00a0 Node *right;\n\u00a0* \u00a0 \u00a0 Node(): val(' '), left(nullptr), right(nullptr) {}\n\u00a0* \u00a0 \u00a0 Node(char x): val(x), left(nullptr), right(nullptr) {}\n\u00a0* \u00a0 \u00a0 Node(char x, Node *left, Node *right): val(x), left(left), right(right) {}\n\u00a0* };\n\u00a0*\/\nclass Solution {\npublic:\n\u00a0 \u00a0 bool checkEquivalence(Node* root1, Node* root2) {\n\u00a0 \u00a0 \u00a0 \u00a0 if (root1 == root2) return true;\n\u00a0 \u00a0 \u00a0 \u00a0 unordered_map&lt;char, int&gt; count1, count2;\n\u00a0 \u00a0 \u00a0 \u00a0 dfs(root1, count1);\n\u00a0 \u00a0 \u00a0 \u00a0 dfs(root2, count2);\n\u00a0 \u00a0 \u00a0 \u00a0 return count1 == count2;\n\u00a0 \u00a0 }\n\u00a0 \u00a0 \nprivate: \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 void dfs(Node* root, unordered_map&lt;char, int&gt; &amp;count) {\n\u00a0 \u00a0 \u00a0 \u00a0 if (!root) return ;\n\u00a0 \u00a0 \u00a0 \u00a0 if (root-&gt;val != '+') count[root-&gt;val] ++;\n\u00a0 \u00a0 \u00a0 \u00a0 dfs(root-&gt;left, count);\n\u00a0 \u00a0 \u00a0 \u00a0 dfs(root-&gt;right, count);\n\u00a0 \u00a0 }\n};<\/code><\/pre>\n<p>DFS k\u00f6rs i O(N) <a href=\"https:\/\/helloacm.com\/how-to-find-the-vertical-order-traversal-of-a-binary-tree-using-dfs-algorithm\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">-tid<\/a> d\u00e4r N \u00e4r antalet noder i b\u00e5da bin\u00e4ra uttryckstr\u00e4den. Utrymmeskomplexiteten \u00e4r O(N) eftersom vi anv\u00e4nder stack via rekursion och \u00e4ven beh\u00f6ver registrera r\u00e4knarna f\u00f6r varje variabel.<\/p>\n<p>F\u00f6r att j\u00e4mf\u00f6ra om tv\u00e5 hash-kartor \u00e4r lika (<a href=\"https:\/\/helloacm.com\/recursive-depth-first-search-algorithm-to-compute-the-diameter-of-binary-tree\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">unordered_map<\/a> ), kan vi helt enkelt j\u00e4mf\u00f6ra dem i C++ med det dubbla likhetstecknet.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Depth First Search Algoritm f\u00f6r att kontrollera om tv\u00e5 uttryckstr\u00e4d \u00e4r likv\u00e4rdiga<\/p>\n","protected":false},"author":1,"featured_media":224845,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[838,848,901,755,724],"tags":[1173],"class_list":["post-233177","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-oeppen-kaella","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233177"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233177\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224845"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}