我之前面试了好几家公司,都会考一些关于二叉树的面试题,比如下面这几个面试题:
1. 二叉树有哪几种遍历方式
2.不用递归如何遍历二叉树3.如何判断二叉树是对称二叉树4.将二叉树左右节点翻转5.实现一个函数接收任意二叉树,求二叉树所有根节点到叶子路径组成的数字之和
前端常考的算法题就是二叉树和排序了,这些好像很多公司都会有一两道这样的题目,大家面试前可以重点看一下这些知识点,这篇文章主要讲解二叉树。
基础知识
了解二叉树之前我们先要知道什么是二叉树和二叉树的组成。
二叉树是每个节点不超过两个。一棵最上面的节点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子节点,一个节点可以有0个或多个子节点,没有任何子节点的节点称为叶子节点
下面代码就是创建二叉树的过程。
function Node(value, left, right) {
this.value = value;
this.left = left;
this.right = right;
}
function BST() {
this.root = null;
this.insert = insert;
}
function insert(value) {
let node = new Node(value, null, null)
if (this.root == null) {
// 根节点
this.root = node;
} else {
// 子节点
let current = this.root;
let parent;
while (true) {
parent = current;
if (value < current.value) {
current = current.left;
if (current == null) {
parent.left = node;
break;
}
} else {
current = current.right;
if(current == null) {
parent.right = node;
break;
}
}
}
}
}
let tree = new BST()
tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
console.log(tree.root)
insert
方法是向二叉树中出入一个节点,我们需要判断节点的位置,分别对比左右节点的大小关系,然后选择性的输入到其中。
实战题目
文章的开头有5道面试题,下面开始做题啦!
问:二叉树有哪几种遍历方式?
答:有三种遍历方式,中序,先序,后序。中序遍历按照节点上的键值,以