C++で三項式を二分木に変換する
このチュートリアルでは、三項式を二分木に変換するプログラムについて説明します。
このために、三項式が提供されます。私たちの仕事は、可能なさまざまなパス(選択肢)に応じて、与えられた式を二分木の形に変換することです。
例
#include<bits/stdc++.h> using namespace std; //node structure of tree struct Node { char data; Node *left, *right; }; //creation of new node Node *newNode(char Data){ Node *new_node = new Node; new_node->data = Data; new_node->left = new_node->right = NULL; return new_node; } //converting ternary expression into binary tree Node *convertExpression(string str, int & i){ //storing current character Node * root =newNode(str[i]); //if last character, return base case if(i==str.length()-1) return root; i++; //if the next character is '?', //then there will be subtree for the current node if(str[i]=='?'){ //skipping the '?' i++; root->left = convertExpression(str,i); //skipping the ':' character i++; root->right = convertExpression(str,i); return root; } else return root; } //printing the binary tree void display_tree( Node *root){ if (!root) return ; cout << root->data <<" "; display_tree(root->left); display_tree(root->right); } int main(){ string expression = "a?b?c:d:e"; int i=0; Node *root = convertExpression(expression, i); display_tree(root) ; return 0; }
出力
a b c d e
-
C++のバイナリツリーでノードの先行ノードを事前注文する
この問題では、二分木とノード値が与えられます。私たちのタスクは、ノードのプレオーダーの先行を印刷することです。 二分木 は、各ルートノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 先行ノードの事前注文 ノードのプレオーダートラバーサルでノードの前に来るノードです。 問題を理解するために例を見てみましょう Input: 1 Output: 9 この問題を解決するには、 navie アプローチは、二分木の
-
C++のバイナリツリーでノードの後続を事前注文する
この問題では、二分木とノード値が与えられます。私たちのタスクは、ノードのプレオーダーサクセサを印刷することです。 二分木 は、各ルートノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 後続ノードの事前注文 ノードのプレオーダートラバーサルでノードの隣に来るノードです。 問題を理解するために例を見てみましょう Input: 9 Output 0 Explanation: the preorder traver