971. 翻转二叉树以匹配先序遍历
Posted Debroon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了971. 翻转二叉树以匹配先序遍历相关的知识,希望对你有一定的参考价值。
971. 翻转二叉树以匹配先序遍历
题目
传送门:https://leetcode.cn/problems/flip-binary-tree-to-match-preorder-traversal/
算法设计:深度优先搜索
先序遍历一棵树,若不符合,则尝试交换左右子树,若还是不符合,返回-1;
注意:若树中存在相同结点值,这种方法是行不通的,不过题目说了,结点值不相同。
class Solution
vector<int> res; // 全局变量存结果
int i = 0; // 全局索引比较方便
public:
vector<int> flipMatchVoyage(TreeNode* root, vector<int>& v)
// 若可通过交换来满足预期,返回交换的结点值
if(dfs(root, v))
return res;
return vector<int>-1;
bool dfs(TreeNode* node, vector<int>& v)
if (!node) return true;
if (node->val != v[i++]) return false; // 若当前结点不符合预期,不符合
if (node->left && node->left->val != v[i]) // 若先序遍历结果与预期不符,则尝试返回交换后的遍历结果
res.push_back(node->val); // 记录这次交换
return dfs(node->right, v) && dfs(node->left, v); // 交换
return dfs(node->left, v) && dfs(node->right, v);
;
以上是关于971. 翻转二叉树以匹配先序遍历的主要内容,如果未能解决你的问题,请参考以下文章