如何组建网站开发团队,wordpress分类添加关键词,wordpress图片 转移oss,不用wordpress目录 102. 二叉树的层序遍历题目描述做题思路参考代码 226. 翻转二叉树题目描述做题思路参考代码 101. 对称二叉树题目描述做题思路参考代码 102. 二叉树的层序遍历
题目描述
给你二叉树的根节点 root #xff0c;返回其节点值的 层序遍历 。 #xff08;即逐层地#xff… 目录 102. 二叉树的层序遍历题目描述做题思路参考代码 226. 翻转二叉树题目描述做题思路参考代码 101. 对称二叉树题目描述做题思路参考代码 102. 二叉树的层序遍历
题目描述
给你二叉树的根节点 root 返回其节点值的 层序遍历 。 即逐层地从左到右访问所有节点。
做题思路
本题属于二叉树的基础题目需要牢牢掌握。
参考代码
class Solution {public ListListInteger resList new ArrayListListInteger();public ListListInteger levelOrder(TreeNode root) {//checkFun01(root,0);checkFun02(root);return resList;}//DFS--递归方式public void checkFun01(TreeNode node, Integer deep) {if (node null) return;deep;if (resList.size() deep) {//当层级增加时list的Item也增加利用list的索引值进行层级界定ListInteger item new ArrayListInteger();resList.add(item);}resList.get(deep - 1).add(node.val);checkFun01(node.left, deep);checkFun01(node.right, deep);}//BFS--迭代方式--借助队列public void checkFun02(TreeNode node) {if (node null) return;QueueTreeNode que new LinkedListTreeNode();que.offer(node);while (!que.isEmpty()) {ListInteger itemList new ArrayListInteger();int len que.size();while (len 0) {TreeNode tmpNode que.poll();itemList.add(tmpNode.val);if (tmpNode.left ! null) que.offer(tmpNode.left);if (tmpNode.right ! null) que.offer(tmpNode.right);len--;}resList.add(itemList);}}
}226. 翻转二叉树
题目描述
给你一棵二叉树的根节点 root 翻转这棵二叉树并返回其根节点。
做题思路
本题属于二叉树的基础题目需要牢牢掌握。
参考代码
//DFS递归
class Solution {/*** 前后序遍历都可以* 中序不行因为先左孩子交换孩子再根交换孩子做完后右孩子已经变成了原来的左孩子再右孩子交换孩子此时其实是对原来的左孩子做交换*/public TreeNode invertTree(TreeNode root) {if (root null) {return null;}invertTree(root.left);invertTree(root.right);swapChildren(root);return root;}private void swapChildren(TreeNode root) {TreeNode tmp root.left;root.left root.right;root.right tmp;}
}//BFS
class Solution {public TreeNode invertTree(TreeNode root) {if (root null) {return null;}ArrayDequeTreeNode deque new ArrayDeque();deque.offer(root);while (!deque.isEmpty()) {int size deque.size();while (size-- 0) {TreeNode node deque.poll();swap(node);if (node.left ! null) {deque.offer(node.left);}if (node.right ! null) {deque.offer(node.right);}}}return root;}public void swap(TreeNode root) {TreeNode temp root.left;root.left root.right;root.right temp;}
}101. 对称二叉树
题目描述
给你一个二叉树的根节点 root 检查它是否轴对称。
做题思路
本题属于二叉树的基础题目需要牢牢掌握。
参考代码
/*** 递归法*/public boolean isSymmetric1(TreeNode root) {return compare(root.left, root.right);}private boolean compare(TreeNode left, TreeNode right) {if (left null right ! null) {return false;}if (left ! null right null) {return false;}if (left null right null) {return true;}if (left.val ! right.val) {return false;}// 比较外侧boolean compareOutside compare(left.left, right.right);// 比较内侧boolean compareInside compare(left.right, right.left);return compareOutside compareInside;}/*** 迭代法* 使用双端队列相当于两个栈*/public boolean isSymmetric2(TreeNode root) {DequeTreeNode deque new LinkedList();deque.offerFirst(root.left);deque.offerLast(root.right);while (!deque.isEmpty()) {TreeNode leftNode deque.pollFirst();TreeNode rightNode deque.pollLast();if (leftNode null rightNode null) {continue;}
// if (leftNode null rightNode ! null) {
// return false;
// }
// if (leftNode ! null rightNode null) {
// return false;
// }
// if (leftNode.val ! rightNode.val) {
// return false;
// }// 以上三个判断条件合并if (leftNode null || rightNode null || leftNode.val ! rightNode.val) {return false;}deque.offerFirst(leftNode.left);deque.offerFirst(leftNode.right);deque.offerLast(rightNode.right);deque.offerLast(rightNode.left);}return true;}/*** 迭代法* 使用普通队列*/public boolean isSymmetric3(TreeNode root) {QueueTreeNode deque new LinkedList();deque.offer(root.left);deque.offer(root.right);while (!deque.isEmpty()) {TreeNode leftNode deque.poll();TreeNode rightNode deque.poll();if (leftNode null rightNode null) {continue;}
// if (leftNode null rightNode ! null) {
// return false;
// }
// if (leftNode ! null rightNode null) {
// return false;
// }
// if (leftNode.val ! rightNode.val) {
// return false;
// }// 以上三个判断条件合并if (leftNode null || rightNode null || leftNode.val ! rightNode.val) {return false;}// 这里顺序与使用Deque不同deque.offer(leftNode.left);deque.offer(rightNode.right);deque.offer(leftNode.right);deque.offer(rightNode.left);}return true;}