二叉树的先中后序遍历

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

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:对根节点的右了树进行中序遍历

复制代码
 
 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:访问根节点

复制代码
 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);
 
复制代码

 

 

posted @   ELSE123  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
Live2D
欢迎阅读『二叉树的先中后序遍历』
点击右上角即可分享
微信分享提示