首页 > 其他分享 >二叉树的先中后序遍历

二叉树的先中后序遍历

时间:2023-01-01 21:00:52浏览次数:42  
标签:遍历 const val right 二叉树 先中 stack left


二叉树:每个节点最多只有两个字节点

JS中通常用 Object来模拟二叉树

(val: 1, left: 0, right: 0)



const bt = {




val: 1,




left: {




val: 2,




left: {




val: 4,




left: null,




right: null,




},




right: {




val: 5,




left: null,




right: null,




},




},




right: {




val: 3,




left: {




val: 6,




left: null,




right: null,




},




right: {




val: 7,




left: null,




right: null,




},




},




};



先序遍历算法(preorder)「根左右」

1:访问根节点

2:对根节点的左子树进行先序遍历

3:对根节点的右子树进行先序遍历

递归遍历

二叉树的先中后序遍历_子树

 非递归(利用栈)



const preorder = (root) => {
if (!root) { return; }
const stack = [root];
while (stack.length) {
const n = stack.pop();
console.log(n.val);
if (n.right) stack.push(n.right);
if (n.left) stack.push(n.left);
}
};
preorder(bt);



中序遍历算法(inorder): 「左根右」

1:对根节点的左子树进行中序遍历

2:访问根节点

3:对根节点的右了树进行中序遍历

二叉树的先中后序遍历_ecmascript_02


const inorder = (root) => {




if (!root) { return; }




const stack = [];




let p = root;




while (stack.length || p) {




while (p) {




stack.push(p);




p = p.left;




}




const n = stack.pop();




console.log(n.val);




p = n.right;




}




};



inorder(bt);



 后序遍历算法(postorder):「左右根」

1:对根节点的左子树进行后序遍历

2:对根节点的右子树进行后序遍历

3:访问根节点

二叉树的先中后序遍历_开发语言_03



const postorder = (root) => {
if (!root) { return; }
const outputStack = [];
const stack = [root];
while (stack.length) {
const n = stack.pop();
outputStack.push(n);
if (n.left) stack.push(n.left);
if (n.right) stack.push(n.right);
}
while(outputStack.length){
const n = outputStack.pop();
console.log(n.val);
}
};
postorder(bt);

标签:遍历,const,val,right,二叉树,先中,stack,left
From: https://blog.51cto.com/u_15765713/5983355

相关文章

  • List接口实现类的遍历方式
    List接口实现类主要有:ArrayList,LinkedList,Vector【三者区别,可以看看java集合.xmind文件】一.ArrayList类的遍历:1publicclassListBianLiTest{2publics......
  • P3916 图的遍历
    题目描述给出 NN 个点,MM 条边的有向图,对于每个点 vv,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点。输入格式第 11 行 22 个整数 N,MN,M,表示点数......
  • leetcode-590. N 叉树的后序遍历
    590.N叉树的后序遍历-力扣(Leetcode)可以参考[[leetcode-589.N叉树的前序遍历]],代码差不多/***DefinitionforaNode.*typeNodestruct{*Valint......
  • leetcode-589. N 叉树的前序遍历
    589.N叉树的前序遍历-力扣(Leetcode)Go语言的切片操作方便性还不错/***DefinitionforaNode.*typeNodestruct{*Valint*Children[]*Node*......
  • 掌握二叉搜索树的双指针 + 公共祖先加深对后序遍历和递归的理解
    530.二叉搜索树的最小绝对差intmin=Integer.MAX_VALUE;TreeNodepre;/***<Ahref="https://leetcode.cn/problems/minimum-absolute-difference-in-......
  • leetcode-563. 二叉树的坡度
    563.二叉树的坡度-力扣(Leetcode)坡度的计算需要4个数左子树所有节点的和右子树所有结点的和左子树的坡度右子树的坡度左子树与右子树节点差值的绝对值为当前节点......
  • SerializedObject遍历
    # 数据类[Serializable]publicclassTest{publicfloatf;publicVector2v2;}[CreateAssetMenu]publicclassTestAsset:ScriptableObject{[......
  • 3任务的创建-列表项的删除&遍历
     1、列表项的删除:从列表中删除指定的列表项,通过uxListRemove()函数来完成pxItemToRemove:要删除的列表项uxListRemove:剩余列表项的数目步骤:获取列表项所在的列表地址将......
  • 三化二叉树trick
    三选一化二叉套路概述这个套路是针对某一建模题的。三选一其实可以扩展到N选一,模型具体如下。发现某种状态可以扩展出\(N\)个状态,且有一个状态相较而言比较特殊(如其他......
  • 迭代(遍历数组)forEach
    1.forEach用法vararr=[13,2,2,5] varsum=0 //forEach用法:Array.forEach(function(数组当前项的值,数组当前项的索引值,数组本身){}) arr.forEach(function(valu......