在 C++ 中查找每行树中的最大值
假设我们有一棵二叉树,我们必须找到这棵树的每一层的最大元素。因此,如果这棵树是这样的:-
那么输出将是 [3,5,8]
要解决此问题,我们将按照以下步骤操作:-
定义一个名为 ans 的数组
定义一个递归函数 solve(),它将使用树节点和层级,层级最初为 0。此方法将像这样发挥作用:-
如果节点为 null,则返回
如果层级 = ans 的大小,则将节点值插入 ans,否则 ans[layer] := ans[layer] 和节点值的最大值
调用 solve(节点的左子树,层级 + 1)
调用 solve(节点的右子树,层级 + 1)
从主方法调用 solve(),使用根作为参数,层级 = 0
然后返回 ans
让我们查看以下实现以获得更好的理解:-
范例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = NULL; right = NULL; } }; void insert(TreeNode **root, int val){ queue<TreeNode*> q; q.push(*root); while(q.size()){ TreeNode *temp = q.front(); q.pop(); if(!temp->left){ if(val != NULL) temp->left = new TreeNode(val); else temp->left = new TreeNode(0); return; } else { q.push(temp->left); } if(!temp->right){ if(val != NULL) temp->right = new TreeNode(val); else temp->right = new TreeNode(0); return; } else { q.push(temp->right); } } } TreeNode *make_tree(vector<int> v){ TreeNode *root = new TreeNode(v[0]); for(int i = 1; i<v.size(); i++){ insert(&root, v[i]); } return root; } class Solution { public: vector <int> ans; void solve(TreeNode* node, int level = 0){ if(!node)return; if(level == ans.size()){ ans.push_back(node->val); } else { ans[level] = max(ans[level], node->val); } solve(node->left, level + 1); solve(node->right, level + 1); } vector<int> largestValues(TreeNode* root) { solve(root); return ans; } }; main(){ vector<int> v = {1,3,2,5,3,NULL,9}; TreeNode *tree = make_tree(v); Solution ob; print_vector(ob.largestValues(tree)); }
输入
[1,3,2,5,3,null,9]
输出
[1, 3, 9, ]
广告