当前位置:网站首页>Summary of common algorithms of binary tree
Summary of common algorithms of binary tree
2020-11-06 01:18:00 【Clamhub's blog】
Node definition
1 |
public static class BinaryNode<T> { |
Binary tree nodes include element values and left and right child node references .
Create nodes
1 |
BinaryNode g = new BinaryNode(7); |
Form like :
1、 front 、 in 、 After the sequence traversal
In front of the binary tree 、 in 、 Before in postorder traversal 、 in 、 The root node ;
Before the order : Output the root node first , And then the left and right nodes .
Middle preface : First left , Then output the root node , To the right .
In the following order : First left and right , Then output the root node .
1 |
public static void visit(BinaryNode p) { |
1.1、 The former sequence traversal
1 |
root -> Left -> Right |
1.1.1、 Recursive implementation
1 |
public static void recursivePreOrder(BinaryNode p) { |
If the node is null, Go straight back to ;
Print out the root node first , Then recursion left subtree , Then recurs the right subtree .
Just meet : First root , And then around .
1.1.2、 Non recursive implementation
1 |
public static void iterativePreOrder(BinaryNode p) { |
Make full use of the idea of stack , First in, then out .
When the node is not empty , Putting nodes on the stack , Iterate the elements in the stack , Pop up top element , Currently the root element , After that, press the right and left child nodes on the stack respectively . In this way, the order of the child nodes is left first and then right .
1.2、 In the sequence traversal
1 |
Left -> root -> Right |
1.2.1、 Recursive implementation
1 |
public static void recursiveInOrder(BinaryNode p) { |
1.2.2、 Non recursive implementation
1 |
public static void iterativeInOrder(BinaryNode p) { |
1.3、 After the sequence traversal
1 |
Left -> Right -> root |
1.3.1、 Recursive implementation
1 |
public static void recursivePostOrder(BinaryNode p) { |
1.3.2、 Non recursive implementation
1 |
public static void iterativePostOrder(BinaryNode p) { |
2、BFS And DFS
2.1、BFS Breadth first search
1 |
1234567 |
Breadth first traversal is to read node elements by layer , We need to use the data structure of the queue .
1 |
public static void levelOrderTraversal(BinaryNode node) { |
2.2、DFS Depth-first search
1 |
1245367 |
Starting from the root node , Select a branch to read all the elements , We need to use the data structure of the stack .
1 |
public static void depthTraversal(BinaryNode node) { |
3、 The depth of the binary tree
104. The maximum depth of a binary tree
3.1、 recursive
1 |
private static int calcDepth(BinaryNode node) { |
3.2、 Depth first
maxDepth Compare the length of each branch to update , Finally get the deepest branch length .
1 |
public static int maxDepthDFS(BinaryNode node) { |
3.3、 breadth-first
Search by layer , Every step into the floor , depth +1.
1 |
public static int maxDepthBFS(BinaryNode node) { |
4、 Binary tree image
Traverse by depth or breadth , Swap the left and right subtrees of nodes .
1 |
public static void mirror(BinaryNode root) { |
5、 Symmetric binary tree
101. Symmetric binary tree
This problem is a variation of binary tree mirror image , If two binary trees are symmetric , be :
- Two root nodes have the same value
- The left subtree of each tree , Are the same as the right subtree of another tree
Recursive implementation :Iterative implementation :1
2
3
4
5
6
7
8
9
10
11public boolean isSymmetric(BinaryNode root) {
return isMirror(root, root);
}
public boolean isMirror(BinaryNode t1, BinaryNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
return (t1.val == t2.val)
&& isMirror(t1.right, t2.left)
&& isMirror(t1.left, t2.right);
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public boolean isSymmetric(BinaryNode root) {
LinkedList<BinaryNode> q = new LinkedList<>();
q.add(root);
q.add(root);
while (!q.isEmpty()) {
BinaryNode t1 = q.poll();
BinaryNode t2 = q.poll();
if (t1 == null && t2 == null) continue;
if (t1 == null || t2 == null) return false;
if (t1.val != t2.val) return false;
q.add(t1.left);
q.add(t2.right);
q.add(t1.right);
q.add(t2.left);
}
return true;
}
summary
The algorithm of various topics of binary tree will think of recursion in the first consciousness , But when the recursion depth is too large, there will be stack overflow , So iterations will be used to implement accordingly , Accordingly, the data structure of queue or stack is introduced .
It feels like the most important algorithm is DFS And BFS, among DFS Depth first search uses the FIFO feature of the stack , and BFS Breadth first search uses the first in first out feature of the queue .

版权声明
本文为[Clamhub's blog]所创,转载请带上原文链接,感谢
边栏推荐
- Why do private enterprises do party building? ——Special subject study of geek state holding Party branch
- Kitty中的动态线程池支持Nacos,Apollo多配置中心了
- 连肝三个通宵,JVM77道高频面试题详细分析,就这?
- Sort the array in ascending order according to the frequency
- Every day we say we need to do performance optimization. What are we optimizing?
- PLC模拟量输入和数字量输入是什么
- Skywalking series blog 1 - install stand-alone skywalking
- DTU连接经常遇到的问题有哪些
- Did you blog today?
- EOS创始人BM: UE,UBI,URI有什么区别?
猜你喜欢

It's so embarrassing, fans broke ten thousand, used for a year!

你的财务报告该换个高级的套路了——财务分析驾驶舱

Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things

小程序入门到精通(二):了解小程序开发4个重要文件

PN8162 20W PD快充芯片,PD快充充电器方案

条码生成软件如何隐藏部分条码文字

大数据应用的重要性体现在方方面面

DevOps是什么

数字城市响应相关国家政策大力发展数字孪生平台的建设

制造和新的自动化技术是什么?
随机推荐
html
直播预告 | 微服务架构学习系列直播第三期
Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
Computer TCP / IP interview 10 even asked, how many can you withstand?
怎么理解Python迭代器与生成器?
幽默:黑客式编程其实类似机器学习!
Swagger 3.0 天天刷屏,真的香嗎?
【效能優化】納尼?記憶體又溢位了?!是時候總結一波了!!
如何玩转sortablejs-vuedraggable实现表单嵌套拖拽功能
Process analysis of Python authentication mechanism based on JWT
ES6 essence:
选择站群服务器的有哪些标准呢?
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
Subordination judgment in structured data
有关PDF417条码码制的结构介绍
快快使用ModelArts,零基礎小白也能玩轉AI!
PLC模拟量输入和数字量输入是什么
PN8162 20W PD快充芯片,PD快充充电器方案
Elasticsearch database | elasticsearch-7.5.0 application construction
Grouping operation aligned with specified datum