只向树的右侧添加元素
Only adding elements to the right side of the tree
在 Leetcode 上,我应该“压平”一棵树,使其成为“链表”。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
TreeNode result = new TreeNode(-1);;
public void flatten(TreeNode root) {
if (root == null) return;
solution1(root);
root = result.right;
}
public void solution1(TreeNode root) {
if (root != null) {
result.right = new TreeNode(root.val);
result = result.right;
if (root.left != null) solution1(root.left);
if (root.right != null) solution1(root.right);
}
}
}
有问题的代码行在这里:
result.right = new TreeNode(root.val);
result = result.right;
我试图只在树的右侧添加元素(所以它看起来像一个链表)但是每次我 运行 我的代码时,我的“链表”看起来像一个输入树的精确副本。
如果有人能指出正确的方向,我将不胜感激!
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
^ 这就是问题所在。我发布的代码是我认为天真的解决方案的第一个“运行down”。
因为 result = result.right;
你的 result
指向你添加的最后一个节点。
所以没有指向你的新根的指针。
root = result.right;
实际上什么都不做,因为你 re-assign 参数并且从不使用它(顺便说一句:你应该避免 re-assigning 参数,创建局部变量)。
您可以修改您的 solution1
(在第一个 if
之后)和 root
指向您的 LinkedList
:
if (this.result == null) {
this.result = new TreeNode(root.val);
this.pointer = this.result;
} else {
this.pointer.right = new TreeNode(root.val);
this.pointer = this.pointer.right;
}
TreeNode pointer;
是新 class 成员。
result
未初始化,因此在第一次迭代时为 null
。
在 Leetcode 上,我应该“压平”一棵树,使其成为“链表”。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
TreeNode result = new TreeNode(-1);;
public void flatten(TreeNode root) {
if (root == null) return;
solution1(root);
root = result.right;
}
public void solution1(TreeNode root) {
if (root != null) {
result.right = new TreeNode(root.val);
result = result.right;
if (root.left != null) solution1(root.left);
if (root.right != null) solution1(root.right);
}
}
}
有问题的代码行在这里:
result.right = new TreeNode(root.val);
result = result.right;
我试图只在树的右侧添加元素(所以它看起来像一个链表)但是每次我 运行 我的代码时,我的“链表”看起来像一个输入树的精确副本。
如果有人能指出正确的方向,我将不胜感激!
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/ ^ 这就是问题所在。我发布的代码是我认为天真的解决方案的第一个“运行down”。
因为 result = result.right;
你的 result
指向你添加的最后一个节点。
所以没有指向你的新根的指针。
root = result.right;
实际上什么都不做,因为你 re-assign 参数并且从不使用它(顺便说一句:你应该避免 re-assigning 参数,创建局部变量)。
您可以修改您的 solution1
(在第一个 if
之后)和 root
指向您的 LinkedList
:
if (this.result == null) {
this.result = new TreeNode(root.val);
this.pointer = this.result;
} else {
this.pointer.right = new TreeNode(root.val);
this.pointer = this.pointer.right;
}
TreeNode pointer;
是新 class 成员。
result
未初始化,因此在第一次迭代时为 null
。