102. 二叉树的层序遍历
思路:使用辅助数据结构队列。
public IList<IList<int>> LevelOrder(TreeNode root) {
IList<IList<int>> result = new List<IList<int>>();
if(root == null) return result;
Queue<TreeNode> queue = new Queue<TreeNode>();
queue.Enqueue(root);
while (queue.Count != 0)
{
int size = queue.Count;
List<int> array = new List<int>();
while (size-- != 0)
{
TreeNode node = queue.Dequeue();
array.Add(node.val);
if (node.left != null) queue.Enqueue(node.left);
if (node.right != null) queue.Enqueue(node.right);
}
result.Add(array);
}
return result;
}
226. 翻转二叉树
思路: 递归三部曲
public TreeNode InvertTree(TreeNode root) {
Invert(root);
return root;
}
public void Invert(TreeNode node){
if(node == null) return;
TreeNode tmpNode = node.left;
node.left = node.right;
node.right = tmpNode;
Invert(node.left);
Invert(node.right);
}
101. 对称二叉树
public bool IsSymmetric(TreeNode root) {
if(root == null)
{
return true;
}
return compare(root.left,root.right);
}
public bool compare(TreeNode left, TreeNode right)
{
if(left == null && right != null) return false;
else if(left == null && right == null) return true;
else if(left != null && right == null) return false;
else if(left.val != right.val) return false;
bool outside = compare(left.left, right.right);
bool inside = compare(left.right, right.left);
return outside && inside;
}