关于算法:算法学习笔记-day5二叉树

27次阅读

共计 833 个字符,预计需要花费 3 分钟才能阅读完成。

老规矩上链接

二叉树的定义

二叉树节点构造(有点像双向链表)

class Node<V> {
V value;
Node left;
Node right;
}

用递归和非递归两种形式实现二叉树的先序、中序、后序遍历

二叉树得先中后序又称为深度优先遍历。
遍历程序如下:(实际上就是跟节点在前 中 后的程序)。
前序遍历:根结点 —> 左子树 —> 右子树
中序遍历:左子树 —> 根结点 —> 右子树
后序遍历:左子树 —> 右子树 —> 根结点
实现上都能够通过递归序转变而来。
如下图所示:

但如果不必递归的话,其实就是模仿手动压栈的过程
以中序遍历为例: 每次就是整棵树左边界进栈,顺次弹出的过程当中,对弹出节点右侧子节点反复此过程
已上图为例先压 1 在压 2 再压 4。那么先弹 4。无右侧子节点弹 2 有右侧,对 5 进行此操作,弹 5,没了。弹 1 有右侧反复,压 3 压 6 弹 6 弹 3 有右 弹 7。
原理是什么呢?原理其实就是任何树都能靠左边界来合成 举个例子:

层序优先遍历(宽度优先遍历)

思路:应用队列,放入该节点,弹出,而后先放左 再放右周而复始
还是以上图为例:先放 1 弹 1 再放 2 放 3 弹 2 放 4 放 5 弹 3 放 6 放 7

public static void w(Node head) {if(head == null) {return;}
Queue<Node> queue = new LinkedList‹>();
queue.add(head);while(!queue. isEmpty()){Node cur = queue.pol1();System.out.printin(cur.value);if(cur.left I=nul1) {queue.add(cur. left);}
if(cur.right l=nul1) {queue. add(cur.right);}
}

相干题目:求一颗二叉树最大宽度

二叉树的相干概念及其实现判断

如何判断一颗二叉树是否是搜寻二叉树?

如何判断一颗二叉树是齐全二叉树?

如何判断一颗二叉树是否是满二叉树?

如何判断一颗二叉树是否是均衡二叉树?(二叉树题目套路)

正文完
 0