C++での二分木の対角トラバーサルのK番目のノード
このチュートリアルでは、二分木の対角トラバーサルでk番目のノードを見つけるプログラムを作成します。
問題を解決するための手順を見てみましょう。
- サンプルデータを使用してバイナリツリーを初期化します。
- 数値kを初期化します。
- データ構造キューを使用して、バイナリツリーを斜めにトラバースします。
- 各ノードのkの値をデクリメントします。
- kが0になったときにノードを返します。
- そのようなノードがない場合は-1を返します。
例
コードを見てみましょう。
#include <bits/stdc++.h> using namespace std; struct Node { int data; Node *left, *right; }; Node* getNewNode(int data) { Node* node = (Node*)malloc(sizeof(Node)); node->data = data; node->left = node->right = NULL; return node; } int findDiagonalKthElement(Node* root, int k) { if (root == NULL || k == 0) { return -1; } int result = -1; queue<Node*> q; q.push(root); q.push(NULL); while (!q.empty()) { Node* temp = q.front(); q.pop(); if (temp == NULL) { if (q.empty()) { if (k == 0) { return result; }else { break; } } q.push(NULL); }else { while (temp) { if (k == 0) { return result; } k--; result = temp->data; if (temp->left) { q.push(temp->left); } temp = temp->right; } } } return -1; } int main() { Node* root = getNewNode(10); root->left = getNewNode(5); root->right = getNewNode(56); root->left->left = getNewNode(3); root->left->right = getNewNode(22); root->right->right = getNewNode(34); root->right->right->left = getNewNode(45); root->left->right->left = getNewNode(67); root->left->right->right = getNewNode(100); int k = 9; cout << findDiagonalKthElement(root, k) << endl; return 0; }
出力
上記のコードを実行すると、次の結果が得られます。
67
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
Pythonでの二分木プレオーダートラバーサル
二分木があるとします。そのツリーのプレオーダートラバーサルを返す必要があります。したがって、ツリーが次のような場合- その場合、プレオーダートラバーサルは次のようになります:[3,9,20,15,7] これを解決するには、次の手順に従います- resとstという空のリストを作成します。 node:=root ノードまたはstが空でない場合 ノードがnullでない場合、 ノードのvalをresに挿入し、ノードをstに挿入し、ノードを設定します:=ノードの左側 temp:=stの最後の要素、およびstの最後の要素を削除 臨時雇用者の権利が利用できる場合は、 node:=t
-
C++で二分木の垂直方向の走査でk番目のノードを見つけます
二分木と値Kがあるとします。タスクは、垂直方向の走査でK番目のノードを出力することです。そのようなノードが存在しない場合は、-1を返します。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 5 6 3 8 7 9 したがって、K =3の場合、結果は1になります。 アプローチは簡単です。垂直方向の走査を実行し、現在のノードがk番目のノードであるかどうかを確認し、そうである場合は戻ります。 例 #include<iostream> #include<map> #include<vector> #incl