当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 快快使用ModelArts,零基礎小白也能玩轉AI!
- After brushing leetcode's linked list topic, I found a secret!
- Basic principle and application of iptables
- 网络安全工程师演示:原来***是这样获取你的计算机管理员权限的!【维持】
- Analysis of ThreadLocal principle
- PHPSHE 短信插件说明
- 50 + open source projects are officially assembled, and millions of developers are voting
- Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
- Dapr實現分散式有狀態服務的細節
- Python crawler actual combat details: crawling home of pictures
猜你喜欢
随机推荐
事半功倍:在没有机柜的情况下实现自动化
Microservices: how to solve the problem of link tracing
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
[event center azure event hub] interpretation of error information found in event hub logs
阿里云Q2营收破纪录背后,云的打开方式正在重塑
TRON智能钱包PHP开发包【零TRX归集】
Sort the array in ascending order according to the frequency
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Python3 e-learning case 4: writing web proxy
PN8162 20W PD快充芯片,PD快充充电器方案
Why do private enterprises do party building? ——Special subject study of geek state holding Party branch
多机器人行情共享解决方案
Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
C++和C++程序员快要被市场淘汰了
遞迴思想的巧妙理解
PLC模拟量输入和数字量输入是什么
Want to do read-write separation, give you some small experience
Skywalking series blog 2-skywalking using
容联完成1.25亿美元F轮融资
Serilog原始碼解析——使用方法




