当前位置:网站首页>Application of four ergodic square of binary tree
Application of four ergodic square of binary tree
2020-11-08 15:22:00 【osc_03803522】
Preface
In the last chapter we started with 0
To 1
The implementation of a binary search tree , And understand the characteristics and basic operation of binary search tree , This chapter introduces more about binary trees , That's tree traversal , Access to each node of the tree . It mainly includes preorder traversal 、 In the sequence traversal 、 After the sequence traversal 、 Sequence traversal , The first three are also called depth first traversal (DFS)
, The last sequence traversal is also called breadth first traversal (BFS)
, Understand the differences between these four traversal methods , When we encounter the tree related algorithm problem again , And you can be more comfortable . It's not just a binary search tree , The idea of traversal also applies to multitree .
Depth-first traversal (DFS)
Depth first, as the name suggests , Start with the depth of the tree , That is, visit one of the subtrees first , And then visit another subtree . The depth priority of the tree is divided into the front / in / After the sequence traversal , The only difference between them is when accessing a specific node , They are different in order . Depth first is usually implemented recursively , Because it's easy to understand , Of course, you can also use traversal to implement , But that will increase the complexity of the code and the semantics of the code .(LeetCode The non recursive implementation of up and down traversal is difficult )
The former sequence traversal
In other words, access the node of the tree from the front , First post the code , Add the method of preorder traversal to the binary search tree implemented in the previous chapter :
Use one prev
Variables cache the last visited node , Each time, let the current access node value minus the previous node value , Because it's a middle order traversal , So the value of the current node must be greater than that of the previous node , Go through the whole tree , Return the minimum value of subtraction .
After the sequence traversal
Just change the location of the access node , Visit the left subtree first , Visit the right subtree , Finally, visit its own root node , Post code :
class BST {
constructor() {
this.root = null // The root node
}
...
postorder(fn) { // After the sequence traversal
const _helper = node => {
if (!node) {
return
}
_helper(node.left) // First visit the left child
_helper(node.right) // And then interview the right child
fn(node.val) // Finally, the root node is accessed
}
_helper(root)
}
}
First visit the left subtree , And then the right subtree , Finally, there is the node itself , The order of access is as follows :
Postorder traversal applications - 563- The slope of the binary tree
Given a binary tree , Calculate the slope of the whole tree .
The slope of a tree node is defined as , The absolute value of the difference between the sum of the nodes of the left subtree and the sum of the nodes of the right subtree . The slope of the empty node is 0.
The slope of the whole tree is the sum of the slopes of all its nodes .
In short, the slope of each node is equal to the absolute difference between the sum of its left and right subtrees , So the slope of the leaf node is 0
, Because the left and right children are empty nodes , Back to you 0-0
Value . If we disassemble the subproblem , It can be understood that the slope of the whole tree is the sum of the slopes of its left and right sub trees , Therefore, it is necessary to calculate the slope of the left and right children before calculating the slope of the current node , Post order traversal is very suitable for .
The solution code is as follows :
var findTilt = function (root) {
let tilt = 0
const _helper = (node) => {
if (!node) {
return 0 // The slope of leaf node is 0
}
const l = _helper(node.left) // First find the sum of the left subtree
const r = _helper(node.right) // Then find the sum of the right subtree
tilt += Math.abs(l - r) // The slope of the current node is equal to the absolute difference between the sum of the left and right subtrees
return l + r + node.val // Return to the subtree and
}
_helper(root)
return tilt
};
Depth-first traversal (DFS) Advanced application
The above three algorithms , The front of the tree is shown separately / in / The practical application of postorder traversal , That's not enough . Some algorithmic problems can not be solved by the conventional traversal method , At this time, we need to deeply understand the tree's (DFS)
After traversing the properties , Make extra flexible processing to solve .
Anti normal ordinal traversal - 538- Convert binary search tree to accumulation tree
Given a binary search tree , Turn it into an accumulation tree , So that the value of each node is the sum of the original node value plus all nodes greater than it .
The topic is not easy to understand , But as you can see from the example of the transformation , Start with the rightmost leaf node of the right subtree , Add the node values in pairs , Finally, the whole tree is accumulated from right to left . If you think of this binary search tree as an array [7,10,12,15,22,26,37]
, Then its operation is to add the array from back to front and cover the previous value . For trees , We need to do an unconventional middle order traversal , First, traverse the right subtree , Then traverse the root node , Finally, traverse the left subtree , That is, a descending traversal .
var convertBST = function (root) {
let sum = 0
const _helper = (node) => {
if (!node) {
return null
}
_helper(node.right) // First traverse the right subtree
node.val += sum // After the right subtree to the bottom, the values are accumulated and covered one by one
sum = node.val // It records the value of the last node that was covered
_helper(node.left) // Finally, traverse the left subtree
}
_helper(root)
return root // Returns a new cumulative tree
};
Preorder and postorder traversal - 257- All paths of binary tree
Given a binary tree , Return all paths from the root node to the leaf node .
The requirement of the title is from the root node to the leaf node , So record the current node of each step , The order of preorder traversal can record the entire path from root to leaf node . The interesting thing about this problem is that when the preorder traversal returns , The last leaf node needs to be removed from the path , Re add another node path value , So it can be in the order of post traversal , Like a greedy snake, you eat the paths you have visited . Some people take this solution to a very powerful, called backtracking . The code is as follows :
版权声明
本文为[osc_03803522]所创,转载请带上原文链接,感谢
边栏推荐
- The birth of a new integrated memory and computing chip is conducive to the application of artificial intelligence~
- Ubuntu20.04下访问FTP服务器乱码问题+上传文件
- Get PMP certificate at 51CTO College
- Talking about, check the history of which famous computer viruses, 80% of the people do not know!
- Flink: from introduction to Zhenxiang (3. Reading data from collection and file)
- It's just right. It's the ideal state
- Workers, workers soul, draw lifelong members, become a person!
- On DSA of OpenGL
- 我用 Python 找出了删除我微信的所有人并将他们自动化删除了
- 阿里云加速增长,进一步巩固领先优势
猜你喜欢
浅谈单调栈
. net large data concurrency solution
Comics: looking for the best time to buy and sell stocks
Implementation of verification code recognition in Python opencv pytesseract
I used Python to find out all the people who deleted my wechat and deleted them automatically
Station B STM32 video learning
Workers, workers soul, draw lifelong members, become a person!
GopherChina 2020大会
rabbitmq(一)-基础入门
CSP考试须知与各种小技巧
随机推荐
Talking about, check the history of which famous computer viruses, 80% of the people do not know!
On DSA of OpenGL
STM32CubeIDE下载安装-GPIO基本配置操作-Debug调试(基于CMSIS DAP Debug)
Solution of DEV-C + + unable to debug in Windows Environment
Flink从入门到真香(10、Sink数据输出-Elasticsearch)
刚刚好,才是最理想的状态
Golang ICMP Protocol detects viable hosts
How to make a correct summary for 7 years?
Xiaoqingtai officially set foot on the third day of no return
一文读懂机器学习“数据中毒”
Get PMP certificate at 51CTO College
wanxin finance
Suitable for C / C + + novice learning some projects, do not give me to miss!
浅谈单调栈
.NET 大数据量并发解决方案
Arduino IDE搭建ESP8266开发环境,文件下载过慢解决方法 | ESP-01制作WiFi开关教程,改造宿舍灯
Ali tear off the e-commerce label
原创 | 数据资产确权浅议
喜获蚂蚁offer,定级p7,面经分享,万字长文带你走完面试全过程
Huawei has an absolute advantage in the 5g mobile phone market, and the market share of Xiaomi is divided by the market survey organization