C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。


二分木が与えられた場合、その葉のノードを印刷してから、それらの葉のノードを削除してから、ツリーにノードがなくなるまで繰り返す必要があります。

C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。


C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。


C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。

したがって、問題の出力は-

になります。
 6 7 9 13 143 421 

アプローチ

DFSを適用するアプローチを採用しています。

一時的な値を適用するには、すべての値にゼロを割り当ててから、すべてのノードに値 maximum(両方の子の値)+1を割り当てます。 。

アルゴリズム

 STARTSTEP 1-> DEFINE A struct Node WITH DATA MEMBERS data、order、* left、* rightSTEP 2-> DEFINE A struct Node * newNode(int data、int order)WITH struct Node * node =new Node、node-> data =data、node-> order =order、node-> left =NULL、node-> right =NULL、return(node)FUNCTION void postod(struct Node * node、vector >&v )STEP 1-> IF node ==NULL THEN、RETURNSTEP 2-> CALL FUNCTION postod(node-> left、v)STEP 3-> CALL FUNCTION postod(node-> right、v)STEP 4-> IF node-> right ==NULL &&node-> left ==NULL THEN、SET node-> order AS 1 v.push_back(make_pair(node-> order、node-> data))ELSE node-> order =max((node->左)-> order、(node-> right)-> order)+ 1 v.push_back(make_pair(node-> order、node-> data))END IFFUNCTION void printLeafNodes(int n、vector >&v)ステップ1-> sort(v.begin()、v.end())ステップ2-> LOOP FOR i =0 AND i  struct Node * root =newNode(8、0)STEP 2-> DECLARE AND SET n =9STEP 3-> CALL postod(root、v); STEP 4-> CALL printLeafNodes(n、v);<のようなルートノードを作成します。 / pre> 

 #include usingnamespace std; struct Node {int data; int order; structNode*左; struct Node * right;}; struct Node * newNode(int data、int order){struct Node * node =new Node; node-> data =data; node-> order =order; node-> left =NULL; node-> right =NULL; return(node);} void postod(struct Node * node、vector >&v){if(node ==NULL)return; /*左の子で最初に繰り返されます*/postod(node-> left、v); /*右の子で繰り返されるようになりました*/postod(node-> right、v); //現在のノードがリーフノードの場合、順序は1になりますif(node-> right ==NULL &&node-> left ==NULL){node-> order =1; //割り当てられた値とツリー値のペアを作成しますv.push_back(make_pair(node-> order、node-> data)); } else {node-> order =max((node-> left)-> order、(node-> right)-> order)+ 1; v.push_back(make_pair(node-> order、node-> data)); }} void printLeafNodes(int n、vector >&v){sort(v.begin()、v.end()); for(int i =0; i 左=newNode(2、0); root-> right =newNode(3、0);ルート->左->左=newNode(4、0);ルート->左->右=newNode(6、0);ルート->右->左=newNode(14、0);ルート->右->右=newNode(9、0);ルート->左->左->左=newNode(7、0);ルート->左->左->右=newNode(13、0); int n =9; vector > v; postod(root、v); printLeafNodes(n、v); 0を返す;}

出力

このプログラムは出力を出力します-

 6 7 9 13 143 421 

  1. C++プログラミングのバイナリツリーの各ノードのセットビット数を出力します。

    バイナリツリーが与えられると、関数はノードに格納されているキーのバイナリ値を生成し、そのバイナリに相当するビット数(1)を返します。 例 次のようなキーを持つ二分木:10 3 211 140162100および146 キー 同等のバイナリ ビット(出力)を設定 10 1010 2 3 0011 2 211 11010011 5 140 10001100 3 162 10100010 3 100 1100100 3 146 10010010 3 ここでは、関数_

  2. C ++の1つのスタックを使用して、リーフノードを左から右にバイナリツリーで印刷します。

    プログラムは、バイナリツリーのリーフノードを左から右に出力する必要がありますが、課題は1つのスタックのみを使用することです push()関数を使用してバイナリツリーのノードを挿入し、pop()操作を使用してリーフノードを表示します。 リーフノードは、左右のポインタがNULLであるエンドノードです。これは、特定のノードが親ノードではないことを意味します。 例 Input : 12 21 32 41 59 33 70 Output : 41 59 33 70 スタックはLIFO構造であるデータ構造であり、トップポインターが最後に挿入された要素を指すため、リーフノードは最後にスタックに挿