【发布时间】:2019-02-20 16:33:47
【问题描述】:
问题:https://leetcode.com/problems/invert-binary-tree/
我的方法:
void getInorder(std::vector<int> & vec, TreeNode* root){
if(root){
getInorder(vec, root->left);
vec.push_back(root->val);
getInorder(vec, root->right);
}
}
void setValues(TreeNode* root, std::vector<int> &vec, int &i ){
if(root){
setValues(root->left, vec, i);
root->val = vec[i];
i--;
setValues(root->right, vec, i);
}
}
TreeNode* invertTree(TreeNode* root) {
std::vector<int> inorderList, sol;
getInorder(inorderList, root);
int i = inorderList.size() - 1;
setValues(root, inorderList, i);
getInorder(sol, root);
return root;
}
我正在以无序的方式遍历树,并记下列表中的值。我再次以有序的方式遍历树,但这次我开始将列表末尾的值分配给节点。如果您再次进行排序,这应该交换左右子值,从而提供递减序列。
测试用例 [1,2] 失败。根据逻辑,它输出 [2,1] 对我来说似乎是正确的,但实际输出是 [1, null, 2]。我猜leetcode是在对输出做一个前序遍历,不是很清楚。
我该如何解决这个问题?
【问题讨论】:
-
为什么要搞砸树呢?为什么不只是有一个单独的 proc,
getInorderR,它以 right-mid-left 而不是传统的 left-mid-right 遍历树? -
我不太明白你在说什么。是否应该用reverse-inorder反转顺序?
-
有一个更简单的解决方案,它不会触及这些值。遍历树,交换每个节点的左右指针。
-
哦,是的。我现在正在尝试使用队列迭代地执行此操作。 Leetcode 的输出有点太神秘了。对于 [1,2] 作为输入,他们期望 [1, null, 2] 作为输出。我现在有点迷路了。
-
您的打印代码中似乎有一个错误,因为当前代码似乎是正确的(假设输入确实是一个搜索树,问题没有说明)。你能显示打印最终结果的代码吗?