当前位置:网站首页>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 :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]所创,转载请带上原文链接,感谢
边栏推荐
- Python3 e-learning case 4: writing web proxy
- Skywalking series blog 5-apm-customize-enhance-plugin
- 选择站群服务器的有哪些标准呢?
- It's so embarrassing, fans broke ten thousand, used for a year!
- 连肝三个通宵,JVM77道高频面试题详细分析,就这?
- 中小微企业选择共享办公室怎么样?
- Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
- 基於MVC的RESTFul風格API實戰
- Listening to silent words: hand in hand teaching you sign language recognition with modelarts
- Didi elasticsearch cluster cross version upgrade and platform reconfiguration
猜你喜欢
ipfs正舵者Filecoin落地正当时 FIL币价格破千来了
How do the general bottom buried points do?
Character string and memory operation function in C language
2019年的一个小目标,成为csdn的博客专家,纪念一下
Vue 3 responsive Foundation
DTU连接经常遇到的问题有哪些
Tool class under JUC package, its name is locksupport! Did you make it?
PHP应用对接Justswap专用开发包【JustSwap.PHP】
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
采购供应商系统是什么?采购供应商管理平台解决方案
随机推荐
Menu permission control configuration of hub plug-in for azure Devops extension
从海外进军中国,Rancher要执容器云市场牛耳 | 爱分析调研
加速「全民直播」洪流,如何攻克延时、卡顿、高并发难题?
连肝三个通宵,JVM77道高频面试题详细分析,就这?
Python + appium automatic operation wechat is enough
Flink on paasta: yelp's new stream processing platform running on kubernetes
Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
(1) ASP.NET Introduction to core3.1 Ocelot
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
嘗試從零開始構建我的商城 (二) :使用JWT保護我們的資訊保安,完善Swagger配置
Asp.Net Core learning notes: Introduction
嘘!异步事件这样用真的好么?
直播预告 | 微服务架构学习系列直播第三期
Wiremock: a powerful tool for API testing
如何玩转sortablejs-vuedraggable实现表单嵌套拖拽功能
Microservices: how to solve the problem of link tracing
Nodejs crawler captures ancient books and records, a total of 16000 pages, experience summary and project sharing
熬夜总结了报表自动化、数据可视化和挖掘的要点,和你想的不一样
DevOps是什么
Flink的DataSource三部曲之二:内置connector