欢迎关注我的B站账号:卍卍子非鱼卍卍
前序遍历
前序遍历先访问根节点
,再访问左子树
,最后访问右子树
有如下二叉树:
前序遍历结果为:A B D G C E F
算法思路
1.定义字符串str
记录遍历结果
2.判断根节点root
是否为null
2.1 若不为null
,先访问根节点,将root.val
加入str
中
2.2 将左子树root.left
作为新的根节点递归调用,结果加入str
2.3 将右子树root.right
作为新的根节点递归调用,结果加入str
返回str
代码
/**
* 二叉树前序遍历:先访问根节点,再访问左子树,最后访问右子树
*
* @param root 二叉树根节点
* @return 前序遍历字符串
*/
public String preOrder(BTNode<Character> root) {
String str = "";
if (root != null) {
str += root.val + " ";
str += preOrder(root.left);
str += preOrder(root.right);
}
return str;
}
中序遍历
中序遍历先访问左子树
,再访问根节点
,最后访问右子树
有如下二叉树:
中序遍历结果为:D G B A E C F
算法思路
1.定义字符串str
记录遍历结果
2.判断根节点root
是否为null
2.1 若不为null
,先将左子树root.left
作为新的根节点递归调用,结果加入str
2.2 访问根节点,将root.val
加入str
中
2.3 将右子树root.right
作为新的根节点递归调用,结果加入str
返回str
代码
/**
* 二叉树中序遍历:先访问左子树,再访问根节点,最后访问右子树
*
* @param root 二叉树根节点
* @return 中序遍历字符串
*/
public String inOrder(BTNode<Character> root) {
String str = "";
if (root != null) {
str += inOrder(root.left);
str += root.val + " ";
str += inOrder(root.right);
}
return str;
}
后序遍历
后序遍历先访问左子树
,再访问右子树
,最后访问根节点
有如下二叉树:
后序遍历结果为:G D B E F C A
算法思路
1.定义字符串str
记录遍历结果
2.判断根节点root
是否为null
2.1 若不为null
,先将左子树root.left
作为新的根节点递归调用,结果加入str
2.2 将右子树root.right
作为新的根节点递归调用,结果加入str
2.3 访问根节点,将root.val
加入str
中
返回str
代码
/**
* 二叉树后序遍历:先访问左子树,再访问右子树,最后访问根节点
*
* @param root 二叉树根节点
* @return 后序遍历字符串
*/
public String postOrder(BTNode<Character> root) {
String str = "";
if (root != null) {
str += postOrder(root.left);
str += postOrder(root.right);
str += root.val + " ";
}
return str;
}
层次遍历
层次遍历按层访问所有节点
有如下二叉树:
后序遍历结果为:A B C D E F G
算法思路
1.定义队列Deque<BTNode<Character>> queue
用于临时存储节点,定义字符串str
记录遍历结果
2.根节点root
加入queue
3.当queue
非空时循环:
3.1 定义整数size
获取当前队列长度
3.2 循环size
次:
3.2.1 队首元素出队,用node
表示
3.2.2 node.val
加入str
3.2.3 检查node
的左右子树,若不为null
,将其加入队尾
4.queue
为空,说明所有节点已访问,返回str
代码
/**
* 二叉树层次遍历:按层访问所有节点
*
* @param root 二叉树根节点
* @return 层次遍历字符串
*/
public String levelOrder(BTNode<Character> root) {
if (root == null) {
return "";
}
Deque<BTNode<Character>> queue = new LinkedList<BTNode<Character>>();
queue.add(root);
String str = "";
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
BTNode<Character> node = queue.removeFirst();
str += node.val + " ";
if (node.left != null) {
queue.addLast(node.left);
}
if (node.right != null) {
queue.addLast(node.right);
}
}
}
return str;
}