二叉树总结
1.二叉树的四种遍历(前中后层)
function TreeLinkNode(x){
this.val = x;
this.left = null;
this.right = null;
this.next = null;
}
let num1=[]
let num2=[]
let num3=[]
function first(node) {
if(node==null)
return
num1.push(node.val)
first(node.left)
first(node.right)
}
function middle(node) {
if(node==null)
return
middle(node.left)
num2.push(node.val)
middle(node.right)
}
function last(node) {
if(node==null)
return
last(node.left)
last(node.right)
num3.push(node.val)
}
let num11=[]
let num22=[]
let num33=[]
function first1(node) {
let p=[]
p.push(node)
while(p.length!=0){
let t=p.pop()
num11.push(t.val)
if(t.right) p.push(t.right)
if(t.left) p.push(t.left)
}
}
function middle1(node) {
let p=[]
cur=node
while(cur!=null||p.length!=0){
if(cur!=null){
p.push(cur)
cur=cur.left
}else{
cur=p.pop()
num22.push(cur.val)
cur=cur.right
}
}
}
function last1(node) {
let p=[]
p.push(node)
while(p.length!=0){
let t=p.pop()
num33.push(t.val)
if(t.left) p.push(t.left)
if(t.right) p.push(t.right)
}
}
let layerres=[]
function layer(node) {
let p=[]
p.push(node)
while(p.length)
{
let size=p.length;
for(let i=0;i<size;i++){
let t=p.shift(0)
layerres.push(t.val)
if(t.left) p.push(t.left)
if(t.right) p.push(t.right)
}
}
}
前中后的遍历有(迭代和递归)递归一直在调用(left,right)迭代是利用辅助栈来进行遍历,递归更简单一些,很多二叉树的简单题都是跟二叉树性质有关,使用不同的遍历方法来对二叉树中元素进行操作即可
2.二叉树与其他方法的组合
1.二叉树+回溯
回溯:(暴力),这类问题一般是遍历路径(路径和,或路径组合),主要注意是回溯的退出条件