二叉树的遍历
二叉树的遍历分为前序遍历,中序遍历,后序遍历。
如图,A为根节点,B为左节点,C为右节点。
- 前序顺序是ABC(根节点排最先,然后同级先左后右);
- 中序顺序是BAC (先左后根最后右);
- 后序顺序是BCA(先左后右最后根)。
题目:通过二叉树的两种序列,得到另一序列。例如二叉树的前序遍历为ABHFDECKG,中序遍历为HBDFAEKCG,则它的后序遍历是()?
记住两点:先序后序可以确定根节点,中序遍历可以确定左子树和右子树。
解答上述题目,反复使用上面介绍的两点。可以得到答案。
由前序遍历知道,A是根节点。 则根据中序遍历 知道HBDF是左子树 EKCG是右子树的 然后在根据前序遍历 BHFD 知道B是左子树的根节点 ,再根据中序遍历知道H是左子树,DF是右子树,同理F是根,D是左子树。 由此也可推出后序遍历是:HDFBKGCEA
二叉树中序遍历的代码实现
递归实现
public void inOrderTraverse(TreeNode root) {
if (root != null) {
inOrderTraverse(root.left);
System.out.print(root.val + "->");
inOrderTraverse(root.right);
}
}
非递归实现
public void inOrderTraverse(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while (node != null || !stack.isEmpty()) {
if (node != null) {
stack.push(node);
node = node.left;
} else {
TreeNode tem = stack.pop();
System.out.print(tem.val + "->");
node = tem.right;
}
}
}
参考链接
https://www.cnblogs.com/zhi-leaf/p/10813048.html