C++程式:用深度替換二叉樹中的節點


假設我們有一個二叉樹,我們希望用每個節點的深度替換其值。節點的深度從根節點的0開始,每向下遍歷一層增加1;例如,我們有一個這樣的二叉樹;


這裡我們替換,

節點值 深度
1 0
2 1
3 1
4 2
5 2
6 2
7 2
8 3
9 3

我們進行簡單的先序遍歷,並將每個節點賦予深度。

讓我們看一些輸入場景 -

假設二叉樹中節點的值為 [3 2 7 5 4 6 9 7 2],從該輸入獲得的輸出將為 -

Input: [3 2 7 5 4 6 9 7 2]
Result:
Before: 6 5 9 2 4 3 7 7 2
After: 3 2 3 1 2 0 2 1 2

假設二叉樹中節點的值為 [4 3 5 6 10 7 12 8 1],從該輸入獲得的輸出將為 -

Input: [4 3 5 6 10 7 12 8 1]
Result:
Before: 7 6 12 3 10 4 8 5 1
After: 3 2 3 1 2 0 2 1 2 

示例

下面是一個 C++ 程式,用於用二叉樹中節點對應的深度替換二叉樹中的節點值 -

#include <iostream> using namespace std; class Node { public: int value; Node *left, *right; Node(int value) { this->value = value; left = right = NULL; } }; void solve(Node *node, int depth) { if (node == NULL) { return; } node->value = depth; solve(node->left, depth+1); solve(node->right, depth+1); } void printInorder(Node* root) { if (root == NULL) { return; } printInorder(root->left); cout << root->value <<" "; printInorder(root->right); } int main() { Node* root = new Node(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); root->left->left->left = new Node(8); root->left->left->right = new Node(9); root->right->left = new Node(6); root->right->right = new Node(7); cout << "Before: "; printInorder(root); solve(root, 0); cout << "\nAfter: "; printInorder(root); return 0; }

輸出

Before: 8 4 9 2 5 1 6 3 7
After: 3 2 3 1 2 0 2 1 2 

結論

我們得出結論,使用樹的簡單先序遍歷並在每個節點處用深度替換值足以解決問題。時間複雜度為 O(n)。這是一篇我們希望對您有所幫助的文章。

更新於: 2022年8月10日

287 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.