您的位置:首页 > 编程语言 > C#

LeetCode Online Judge 题目C# 练习 - Binary Tree Inorder Traversal

2012-10-24 23:41 357 查看
public static List<int> BinaryTreeInorderTraveral(BTNode root)
{
List<int> ret = new List<int>();
BinaryTreeInorderTraveralHelper(root, ret);
return ret;
}

public static void BinaryTreeInorderTraveralHelper(BTNode root, List<int> ret)
{
if (root == null)
return;

BinaryTreeInorderTraveralHelper(root.Left, ret);
ret.Add(root.Value);
BinaryTreeInorderTraveralHelper(root.Right, ret);
}


代码分析:

  Inorder Traveral应该没难度吧?但是如果不能用递归就稍稍有点难度了,我相信如果面试问这题,递归肯定不能让面试官满意的。

public static List<int> BinaryTreeInorderTraverlOpt(BTNode root)
{
List<int> ret = new List<int>();
if (root == null)
return ret;

Stack<BTNode> stack = new Stack<BTNode>();
bool backtrack = false;

stack.Push(root);

while (stack.Count > 0)
{
BTNode curr = stack.Peek();
if (curr.Left != null && !backtrack)
{
stack.Push(curr.Left);
backtrack = false;
continue;
}

ret.Add(curr.Value);
stack.Pop();
backtrack = true;

if (curr.Right != null)
{
stack.Push(curr.Right);
backtrack = false;
}
}

return ret;
}


代码分析:

  Iterative做法,用一个 Stack 帮忙,记得要 backtrack flag 来标记当前是往下走还是往上走。往上走的时候就不能再把 curr.Left 加到 Stack 中了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐