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)。这是一篇我们希望对您有所帮助的文章。
广告