- 右子树
*/
public TreeNode right;
}
三种遍历方式
在解题之前,先把前序遍历、中序遍历、后序遍历这三种遍历方式说清楚,为之后的解题打下良好的基础。
前序遍历
前序遍历就是,先访问根结点,再访问左子结点,再访问右子结点。上图二叉树的前序遍历的顺序就是ABDCEGHF。我们可以用Java语言这样实现:
public void preOrder(TreeNode biTree) {
System.out.println(biTree.value);
if(biTree.left != null) {
preOrder(biTree.left);
}
if(biTree.right != null) {
preOrder(biTree.right);
}
}
中序遍历
中序遍历就是,先访问左子结点,再访问根结点,再访问右子结点。上图二叉树的中序遍历的顺序就是DBAGEHCF。我们可以用Java语言这样实现:
public void preOrder(TreeNode biTree) {
if(biTree.left != null) {
preOrder(biTree.left);
}
System.out.println(biTree.value);
if(biTree.right != null) {
preOrder(biTree.right);
}
}
后序遍历
后序遍历就是,先访问左子结点,再访问右子结点,再访问根结点。上图二叉树的后序遍历的顺序就是DBGHEFCA。我们可以用Java语言这样实现:
public void preOrder(TreeNode biTree) {
if(biTree.left != null) {
preOrder(biTree.left);
}
System.out.println(biTree.value);
if(biTree.right != null) {
preOrder(biTree.right);
}
}
经过上面的叙述,可以总结出:前序遍历、中序遍历、后序遍历三种遍历中的“前”、“中”、“后”都是指根结点的访问顺序,“前”则是先访问根结点,“中”则是在左右中间访问根结点,,“后”则是最后访问根结点。
已知前中序遍历顺序,求后序遍历顺序
扯了这么多,还是回到刚刚的第一道面试题上:
已知二叉树的前序遍历顺序为ABDCEGHF,中序遍历顺序为DBAGEHCF,求该二叉树的后序遍历。
我们的解题思路是,先根据前中序遍历顺序重新构造出这个二叉树,再根据二叉树写出后序遍历顺序。
重构二叉树
前序遍历(ABDCEGHF)中的第一个结点A肯定为根结点,那么在中序遍历(DBAGEHCF)中,A结点的左边(DB)肯定为结点A的左子树,A结点的右边(GEHCF)肯定为结点A的右子树,初步判断二叉树是这样的:
再看A的左子树(DB),在前序遍历(ABDCEGHF)中,B在最前面,说明B为该子树的根结点,再看中序遍历(DBAGEHCF),B的左边(D)肯定为A的左子树,B的右边(无)肯定为A的右子树,初步判断二叉树是这样的:
再看A的右子树(GEHCF),在前序遍历(ABDCEGHF)中,C在最前面,说明C为该子树的根结点,再看中序遍历(DBAGEHCF),C的左边(GEH)肯定为C的左子树,C的右边(F)肯定为C的右子树,初步判断二叉树是这样的:
再看C的左子树(GEH),在前序遍历(ABDCEGHF)中,E在最前面,说明E为该子树的根结点,再看中序遍历(DBAGEHCF),E的左边(G)肯定为E的左子树,E的右边(H)肯定为E的右子树,可以最终判断出二叉树是这样的:
Docker步步实践
目录文档:
①Docker简介
②基本概念
③安装Docker
④使用镜像:
⑤操作容器:
⑥访问仓库:
⑦数据管理:
⑧使用网络:
⑨高级网络配置:
⑩安全:
⑪底层实现:
⑫其他项目:
)]
⑨高级网络配置:
[外链图片转存中…(img-jUXdK1JC-1714558836140)]
⑩安全:
[外链图片转存中…(img-TwRfWe0Q-1714558836140)]
⑪底层实现:
[外链图片转存中…(img-vDfGG6Qi-1714558836140)]
⑫其他项目:
[外链图片转存中…(img-B9sizEs5-1714558836141)]