链表:链表的每个节点分为两个部分,一是数据区域,用于存储元素的数据信息;二是指针域,用于存储其直接后继的节点信息,就是向下一个节点的地址,当当前节点为末节点时为null。
function ListNode(x){
this.val = x;
this.next = null;
}
二叉树:
function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
二叉树遍历
广度优先搜索(BFS)/层序遍历
//二叉树的广度优先搜索BFS
//借助队列的数据形式
function PrintFromTopToBottom(root)
{
write code here
var list = []
var result = []
if(root) {list.push(root)}
while(list.length != 0) {
let node = list.shift()
if(node.left) {
list.push(node.left)
}
if(node.right) {
list.push(node.right)
}
result.push(node.val)
}
return result
}
深度优先搜索(DFS)
栈方法
// 二叉树的深度优先搜素(前序遍历)
//使用栈,后入先出;先压入右子树,再压入左子树
function DFS(root) {
var list = []
var result = []
if (root) {
list.push(root)
}
while(list.length != 0) {
let node = list.pop()
if(node.right) {
list.push(node.right)
}
if(node.left) {
list.push(node.left)
}
result.push(node.val)
}
return result
}
递归方法
//节点结构
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
//1、前序遍历
function DLR(root){
console.log(root.val);
if(root.left){
DLR(root.left);
}
if(root.right){
DLR(root.right);
}
}
//2、中序遍历
function LDR(root){
if(root.left){
LDR(root.left);
}
console.log(root.val);
if(root.right){
LDR(root.right);
}
}
//3、后序遍历
function LRD(root){
if(root.left){
LRD(root.left);
}
if(root.right){
LRD(root.right);
}
console.log(root.val);
}