数的基本概念
结点 每一个圆圈就表示一个结点,每个结点里而会存放一些数据(点权值)
边 连接两个结点的一条线,我们认为上面的是父亲,下面的是儿子,边也可以存储权值(边权)。在树中,边的条数严格等于点数-1。
根 最上面的点,每棵树有且仅有一个根。
深度 结点到根的距离,根的深度一般为0或1(怎么写方便怎么来)
树的高度最深的深度
父节点 结点上面直接相连的那个点,除根节点外,每个点有且仅有一个父节点。
儿子节点结点下面分支出的所有点,每个点可能有零个或多个儿子节点。
结点编号可以理解为结点的代号,唯一指向一个结点。
结点的度即儿子结点的个数,也称作分支数。
子树 由某个结点与其所有子孙构成的树(可以想象将其从父亲那里脱离下来的那一部分)
树的遍历
一棵二叉树由根节点,左子树和右子树三部分组成。
所谓先序,中序,后序遍历命名的又来是我们访问二叉树,根节点的顺序。先序遍历就是优先访问根节点,中序遍历是第二个访问根节点,后续遍历就是访问完左右节点之后,最后访问根节点。
先序遍历 :首先访问根结点,然后先序遍历其左子树,最后先序遍历右子树。
先序遍历代码实现
public void dfs(TreeNode root){
if(root==null){
return ;
}
System.out.println(root.val);
dfs(root.left);
dfs(root.right);
}
中序遍历:遍历根节点的左子树然后遍历根节点,最后中序遍历右子树。
中序遍历代码实现
public void dfs(TreeNode root){
if(root==null){
return ;
}
dfs(root.left);
System.out.println(root.val);
dfs(root.right);
}
后续遍历:首先后续遍历根节点的左子树,然后后序遍历根节点的右子树,最后访问根节点
后序遍历的代码实现
public void dfs(TreeNode root){
if(root==null){
return ;
}
dfs(root.left);
dfs(root.right);
System.out.println(root.val);
}