C# 什么';在最深的二叉树中查找元素的最佳解决方案是什么

C# 什么';在最深的二叉树中查找元素的最佳解决方案是什么,c#,algorithm,recursion,iteration,binary-tree,C#,Algorithm,Recursion,Iteration,Binary Tree,最近我有一个关于在二叉树中查找元素的采访问题。我用C#编写了递归和迭代解决方案,但问题是在测试用例中,当我们有一个包含1000000个节点的树时,所有节点都在左边。面试官对我说,我的解决方案(递归和迭代)没有为这种情况节省足够的内存,我不知道如何改进我的解决方案 // recusive Mode public Node Find(int v) { if(v == value) { return this;

最近我有一个关于在二叉树中查找元素的采访问题。我用C#编写了递归和迭代解决方案,但问题是在测试用例中,当我们有一个包含1000000个节点的树时,所有节点都在左边。面试官对我说,我的解决方案(递归和迭代)没有为这种情况节省足够的内存,我不知道如何改进我的解决方案

    // recusive Mode
    public Node Find(int v)
    {
        if(v == value)
        {
            return this;
        }else if(v <value){
            if (left == null) return null;
            return left.Find(v);

        }else{
            if (right == null) return null;
            return right.Find(v);
      }
    }

    // iterative
    public Node Find(int v)
    {
      Node current = this;
      while(value != v && current != null)
      {
        if (v < current.value)
        {
           if (current.left == null){ current = null};
           else{current = current.left};
        }
        else
        {
          if (current.right == null) { current = null};
           else{current = current.right };
        }
      }
      return current;
     }
//递归模式
公共节点查找(int v)
{
if(v==值)
{
归还这个;

}否则,如果(v您的迭代解中有一些错误

// iterative
public Node Find(int v)
{
  Node current = this;
  // Here you need to compare current.value instead of just value
  // Also, to use short-circuiting you need to put null-check first
  // otherwise you might access current.value while current is null
  while(current != null && current.value != v)
  {
    if (v < current.value)
    {
       //if (current.left == null){ current = null};
       //else{current = current.left};
       current = current.left; // the same as two commented out lines
    }
    else
    {
      //if (current.right == null) { current = null};
      //else{current = current.right };
      current = current.right; // the same as two commented out lines
    }
  }
  return current;
 }
//迭代
公共节点查找(int v)
{
节点电流=此;
//这里您需要比较current.value,而不仅仅是value
//此外,要使用短路,您需要首先进行空检查
//否则,您可能会在current为null时访问current.value
while(current!=null&¤t.value!=v)
{
如果(v<当前值)
{
//如果(current.left==null){current=null};
//else{current=current.left};
current=current.left;//与注释掉的两行相同
}
其他的
{
//如果(current.right==null){current=null};
//else{current=current.right};
current=current.right;//与注释掉的两行相同
}
}
回流;
}

迭代和递归都不在堆中分配内存。因此我不明白它们如何能节省更多RAM内存。但是递归版本在每次调用时分配堆栈内存。迭代版本只需要几个字节来保持其局部变量
节点的最新状态
你是说二进制搜索树对吗?否则,你的算法将我不适用于普通的二叉树。