这里写自定义目录标题
Leetcode二叉树的遍历C#代码实现(上)
记录一下学习算法的过程,资料来源leetcode,代码是自己写的。第一次写文章,也是第一次用leetcode,希望自己有进步。
前序遍历(Pre-order Traversal)
先遍历根节点,再遍历左边子节点,最后遍历右边子节点。
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,2,3]
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public IList<int> PreorderTraversal(TreeNode root) {
List<int> tree = new List<int>();
if (root != null)
{
tree.Add(root.val);
foreach(int i in PreorderTraversal(root.left))
tree.Add(i);
foreach(int i in PreorderTraversal(root.right))
tree.Add(i);
}
return tree;
}
}
中序遍历(In-order Traversal)
先遍历左边子节点,再遍历根节点,最后遍历右边子节点。
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public IList<int> InorderTraversal(TreeNode root) {
List<int> tree = new List<int>();
if (root != null)
{
foreach(int i in InorderTraversal(root.left))
{
tree.Add(i);
}
tree.Add(root.val);
foreach(int i in InorderTraversal(root.right))
{
tree.Add(i);
}
}
return tree;
}
}
后序遍历(Post-order Traversal)
先遍历左边节点,再遍历右边子节点,最后遍历根节点。
值得一提的是,当删除一个树的节点时,删除过程是后序遍历的顺序。也就是说,当删除一个节点时,会先删除它的左边子树和右边子树,然后再删除这个节点本身。
而且,后序遍历广泛用于数学表达式。编写程序来解析后序表达式会更容易。比如:
你可以很容易用中序遍历得到原始表达式。
4*(7-2)+5
但是对于一个程序来说并不容易,因为你必须检查运算的优先级。
如果用后序遍历处理这个树,你可以很轻松就用一个栈处理它。当你遇到一个操作符时,就从栈里取两个元素,计算结果然后再把结果放进栈。
这里还没有完全想明白具体是如何进栈出栈的,已经把数据结构全部忘得一干二净了。。。
Input: [1,null,2,3]
1
\
2
/
3
Output: [3,2,1]
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public IList<int> PostorderTraversal(TreeNode root) {
List<int> tree = new List<int>();
if (root != null)
{
foreach(int i in PostorderTraversal(root.left))
{
tree.Add(i);
}
foreach(int i in PostorderTraversal(root.right))
{
tree.Add(i);
}
tree.Add(root.val);
}
return tree;
}
}