{"id":233193,"date":"2023-02-07T14:50:00","date_gmt":"2023-02-07T11:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233193"},"modified":"2023-02-07T14:53:15","modified_gmt":"2023-02-07T11:53:15","slug":"syvyys-ensin-hakualgoritmi-tarkistaaksesi-ovatko-kaksi-lausekepuuta-samanarvoisia","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/syvyys-ensin-hakualgoritmi-tarkistaaksesi-ovatko-kaksi-lausekepuuta-samanarvoisia\/","title":{"rendered":"Syvyys ensin -hakualgoritmi tarkistaaksesi, ovatko kaksi lausekepuuta samanarvoisia"},"content":{"rendered":"\n<blockquote>\n<p>Bin\u00e4\u00e4rilausekepuu on er\u00e4\u00e4nlainen bin\u00e4\u00e4ripuu, jota k\u00e4ytet\u00e4\u00e4n edustamaan aritmeettisia lausekkeita. Jokaisella binaarilausekepuun solmulla on joko nolla tai kaksi alapistett\u00e4. Lehtisolmut (solmut, joissa on 0 lasta) vastaavat operandeja (muuttujia) ja sis\u00e4iset solmut (solmut, joissa on kaksi lasta) vastaavat operaattoreita. T\u00e4ss\u00e4 teht\u00e4v\u00e4ss\u00e4 huomioidaan vain &#8217;+&#8217;-operaattori (eli summaus).<\/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=\"Syvyys ensin -hakualgoritmi tarkistaaksesi, ovatko kaksi lausekepuuta samanarvoisia\"><\/a><\/p>\n<p>lauseke-bin\u00e4\u00e4ri-puu<\/p>\n<p>Sinulle annetaan kahden binaarilausekepuun juuret, juuri1 ja juuri2. Palauttaa tosi, jos kaksi binaarilausekepuuta ovat samanarvoisia. Muussa tapauksessa palauta false.<\/p>\n<p>Kaksi binaarilausekepuuta ovat ekvivalentteja, jos ne evaluoivat samaan arvoon riippumatta siit\u00e4, mihin muuttujat on asetettu.<\/p>\n<p>Seuranta: Mit\u00e4 muutat ratkaisussasi, jos puu tukee my\u00f6s &#8217;-&#8217;-operaattoria (eli v\u00e4hennyslaskua)?<\/p>\n<p>Esimerkki 1:<br \/>\nTulo: root1 = [x], root2 = [x]<br \/>\nTulos: tosi<\/p>\n<p>Esimerkki 2:<br \/>\nSy\u00f6tt\u00f6: root1 = [+,a,+,nolla,null,b,c], root2 = [+,+,b,c,a]<br \/>\nTulos: true<br \/>\nSelitys: a + (b + c) == (b + c) + a<\/p>\n<p>Esimerkki 3:<br \/>\nSy\u00f6tt\u00f6: root1 = [+,a,+,nolla,null,b,c], root2 = [+,+,b,d,a]<br \/>\nTulos: ep\u00e4tosi<br \/>\nSelitys: a + (b + c) != (b + d) + a<\/p>\n<p>Rajoitukset:<br \/>\nSolmujen lukum\u00e4\u00e4r\u00e4 molemmissa puissa on yht\u00e4 suuri, pariton ja alueella [1, 4999].<br \/>\nNode.val on &#8217;+&#8217; tai pieni englanninkielinen kirjain.<br \/>\nOn taattu, ett\u00e4 annettu puu on kelvollinen bin\u00e4\u00e4rilausekepuu.<\/p>\n<p>Vihjeit\u00e4:<br \/>\nLaske kunkin muuttujan kohdalla, kuinka monta kertaa se esiintyi ensimm\u00e4isess\u00e4 puussa.<br \/>\nTee sama toiselle puulle ja tarkista, onko molemmissa puussa sama luku.<\/p>\n<\/blockquote>\n<h3>Syvyys ensin -hakualgoritmi hash-taulukolla<\/h3>\n<p>Koska <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/saeaennoellisen-lausekkeen-kaeyttaeminen-ulkoisten-linkkien-korvaamiseen-wordpressissae-seo-tarkoituksiin\/\" title=\"lausekepuu\">lausekepuu<\/a> on binaarinen ja voi sis\u00e4lt\u00e4\u00e4 vain yhden plussymbolin. Siksi voimme suorittaa Depth First Search Algorithmin (DFS) molemmille bin\u00e4\u00e4rilausekepuille ja laskea kunkin muuttujan. N\u00e4m\u00e4 kaksi lausekepuuta ovat yht\u00e4 suuret, jos molemmat puut sis\u00e4lt\u00e4v\u00e4t saman m\u00e4\u00e4r\u00e4n muuttujia.<\/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><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\">DFS<\/a> suoritetaan O(N) -ajassa, miss\u00e4 N on solmujen lukum\u00e4\u00e4r\u00e4 molemmissa bin\u00e4\u00e4rilausekepuissa. Tilan monimutkaisuus on O(N), koska k\u00e4yt\u00e4mme pinoa rekursion kautta ja meid\u00e4n on my\u00f6s tallennettava jokaisen muuttujan laskurit.<\/p>\n<p>Vertaaksemme, ovatko kaksi hash-karttaa yht\u00e4 suuret (<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> ), voimme yksinkertaisesti verrata niit\u00e4 C++:ssa k\u00e4ytt\u00e4m\u00e4ll\u00e4 kaksoisyht\u00e4ysmerkki\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Syvyys ensin -hakualgoritmi tarkistaaksesi, ovatko kaksi lausekepuuta samanarvoisia<\/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":[750,719,895,834,843],"tags":[1166],"class_list":["post-233193","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-opas-aloittelijoille","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233193"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/224845"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}