【发布时间】:2021-07-12 03:07:27
【问题描述】:
我正在尝试problem,这是我的代码。
class Program
{
static void Main(string[] args)
{
Solution s = new Solution();
s.CreateTree();
}
}
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution
{
static TreeNode n1;
//static or instance , didn't make any difference
Queue<TreeNode> q = new Queue<TreeNode>();
public TreeNode IncreasingBST(TreeNode root)
{
TraverseAndCreateTree(root);
var rootNodeOfResultantTree = q.Dequeue();
return rootNodeOfResultantTree;
}
public void CreateTree()
{
TreeNode t = new TreeNode(5);
t.left = new TreeNode(3);
t.right = new TreeNode(6);
t.left.left = new TreeNode(2);
t.left.right = new TreeNode(4);
t.left.left.left = new TreeNode(1);
t.right.right = new TreeNode(8);
t.right.right.left = new TreeNode(7);
t.right.right.right = new TreeNode(9);
IncreasingBST(t);
}
public void TraverseAndCreateTree(TreeNode root)
{
if (root == null)
{
return;
}
TraverseAndCreateTree(root.left);
n1 = new TreeNode(root.val);
q.Enqueue(n1);
n1 = n1.right;
//reassigned the global variable
TraverseAndCreateTree(root.right);
}
}
我知道代码对问题不正确,但我无法理解为什么全局变量重新分配不起作用。我期待我的全局变量 n1 被重新分配为其右子节点并获得它的值。但这不会发生。检查q中的第一个值时,它的左右孩子都是null。
这可能是什么原因?全局变量是否不会在所有调用堆栈条目之间共享,并且如果在其中一个条目中发生更改,是否应该在所有条目中反映出来?
【问题讨论】:
-
我不明白你为什么会这么想。在您的代码中,您从未设置任何节点的右子节点。你从来没有写过像
node.right = ...;这样的东西。 -
@Sweeper :- 很好。我现在才意识到
标签: c# recursion tree global-variables