current position:Home>[javascript question brushing] tree - verify binary search tree, leetcode 98
[javascript question brushing] tree - verify binary search tree, leetcode 98
2022-06-24 08:51:11【GoldenaArcher】
[JavaScript Brush problem ] Trees - Verify binary search tree , leetcode 98
github repo Address : https://github.com/GoldenaArcher/js_leetcode,Github The catalog of Probably It will be updated more diligently .
Title address :98. Validate Binary Search Tree
subject
as follows :
Given the
root
of a binary tree, determine if it is a valid binary search tree (BST).A valid BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node’s key.
- The right subtree of a node contains only nodes with keys greater than the node’s key.
- Both the left and right subtrees must also be binary search trees.
Their thinking
The first requirement in the title is :
The nodes contained in the left subtree Less than The value of the current node
The second requirement is :
The nodes contained in the right subtree Greater than The value of the current node
So that's what I wrote when I first started using recursion :
const validate = (root) => {
if (!root) return true;
if (root.val >= root?.left?.val || root.val <= root?.right?.val) return false;
return validate(root.left) && validate(root.right);
};
This hierarchical search , From the two cases given in the title , This writing method can run through :
however , Once this kind of writing encounters such a situation, there is no way to deal with it :
The tree above is not a legal binary search tree , because 6 The left node of is 3, The binary search tree must satisfy that the value of the right subtree is greater than the current value . 3 < 5 3 < 5 3<5, Naturally, there is no way to satisfy the conditions of binary search tree .
in other words , In recursive conditions , It is necessary to substitute a maximum value and a minimum value to judge whether the current node is within a reasonable range .
Take the tree above as an example , When calculating to the root node ; The judgment is as follows :$ -\inf < 5 < \inf$, therefore 5 Is a legal value .
Into the second layer , The child node on the left is updated , Update the maximum value to the value of the parent node , We can draw $ -\inf < 1 < 5$, therefore 1 It's also a legal value . The judgment of the right node is 5 < 6 < inf 5 < 6 < \inf 5<6<inf, It is also within the specified scope , First of all + The second layer satisfies a binary tree .
Into the third layer ,1 No child nodes , So it ends here . about 6 For the left subtree of , At this time, the minimum value is still maintained at 5, The maximum value is 6, 5 < 3 < 6 5 < 3 < 6 5<3<6 This equation does not hold , So in this step you can go back to false 了 .
Use JavaScript Problem solving
Each step of the recursion calls the current low
or high
Pass it to the next floor , At the same time, the minimum value is updated when checking the right subtree , Update the maximum value when checking the left subtree , This will satisfy all A A A All the left subtrees of are less than A A A Value , And all A A A All right subtrees of are greater than A A A Value This demand .
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */
/** * @param {TreeNode} root * @return {boolean} */
var isValidBST = function (root) {
const validate = (root, low, high) => {
if (root === null) return true;
if (
(low !== null && root.val <= low) ||
(high !== null && root.val >= high)
)
return false;
return (
validate(root.right, root.val, high) && validate(root.left, low, root.val)
);
};
return validate(root, null, null);
};
copyright notice
author[GoldenaArcher],Please bring the original link to reprint, thank you.
https://en.qdmana.com/2022/175/202206240636210350.html
The sidebar is recommended
- How to read files using JavaScript
- Example of JavaScript FileReader API processing files
- Springboot+vue project tourism information recommendation system [source code open source]
- Ultra wideband pulse positioning scheme, UWB precise positioning technology, wireless indoor positioning application
- Elementui used tabs to step on the pit
- Ant Design Vue - remove the input component border and the border blue shadow effect when getting focus
- Get httponly protected cookies across sub domains through XSS
- Coding specification - Vue project
- Code writing specification - Javascript
- Code specification - HTML
guess what you like
Code writing specification - CSS
CSS Notes 6
Quickly set up PgSQL for serverless
404405 troubleshooting after Vue uses proxy packaging
Vue3 TS learning
What is the charm of python, which is warmly pursued by countless programmers?
HTML Basics
CSS Foundation
CSS (PC side) three methods of traditional page layout
Inline element, block element, inline block element
Random recommended
- 19、 Lua garbage collection of enterprise rapid development platform spring cloud+spring boot+mybatis+elementui
- Detailed introduction to render props and high-level component hoc in react tutorial
- Introduction to high order components (HOC) in react tutorial
- Front end and back end love and hate -- sequel
- When Vue adds on-demand loading to the UI library and starts the project, an error is reported in babel-preset-es2015
- Select in element uses typescript to define initial data, which has no effect
- Vue video player of Vue player plug-in
- React configuration component path reference @ to represent SRC root path
- Use less and CSS modules in react scaffold Engineering
- JavaScript plug-in download instructions and introduction of the web front end, NPM, install, save, and require
- Plug in download instructions and introduction of Vue in the web front end, NPM, install, save
- Summary of front-end common interview questions
- JavaScript automatically adds tag UTF-8 encoding
- Summary of three for loop statements in front-end JavaScript
- Vue hook function
- Monitor page rotation in Vue, and display in full screen on echarts mobile terminal
- Webpack learning notes series 07- how it works
- Webpack learning notes series 06- Packaging Optimization
- Webpack learning notes series 08-hmr hot update
- [Vue] understanding and thinking of new features based on Vue 3
- Fasthttp: go framework ten times faster than net/http (server)
- The difference between preload and prefetch and how to optimize in webpack projects
- Several ways of calling methods to transfer parameters in react render
- Axios usage
- LabVIEW finds prime numbers in an array of n elements
- Elementui form custom regular expression validation text box
- Export markdown to HTML, PDF with browser
- Experience summary of typescript transformation process of old vue2.x projects
- Front end development uses graphql -- vue3 uses graphql
- JS to get the last element of the array
- About Axios request - delete method
- The salon for the first anniversary of the open source of oasis, an ant interactive graphics engine, is coming. On February 26, we will see you in the live studio!
- Best practices for cookie notification
- How does HTML5 implement live streaming? It's worth learning!
- Record webpackdemo configuration
- Android studio uses iconfont Ali vector icon library
- HttpMediaTypeNotSupportedException: Content type ‘application. yml/json; charset=UTF-8‘ not supported
- CSS notes
- Nginx enables geoip2 module to realize national city identification - the road to dream
- Database to query the quantity of books lent in this month. If it is higher than 10, it will display "more than 10 books lent in this month". Otherwise, it will display "less than 10 books lent in this month"