树的相关操作

  1. 前序遍历
    时间复杂度: O(n)
    空间复杂度:O(n)
var preorderTraversal = function(root) {
    var stack = []
    var nodes = []
    var p = root
    while( stack.length != 0 || p != null){
        if(p != null){
            stack.push(p)
            nodes.push(p.val)
            p = p.left
        }else{
            var node = stack.pop()
            p = node.right
        }
    }
    return nodes
};

94.中序遍历

var inorderTraversal = function(root) {
    var stack = []
    var nodes = []
    var p = root
    while(stack.length != 0 || p != null){
        if(p != null){
            stack.push(p)
            p =p.left
        }else{
            var node = stack.pop()
            nodes.push(node.val)
            p = node.right
        }
    }
    return nodes
};

145.后序遍历

var postorderTraversal = function(root) {
    var stack = []
    var nodes = []
    var p = root
    while(stack.length != 0 || p != null){
        if(p != null){
            stack.push(p)
            nodes.unshift(p.val)
            p =p.right
        }else{
            var node = stack.pop()
            p = node.left
        }
    }
    return nodes
};
  1. 层序遍历
    思路:二叉树的层序遍历通过队列进行,先将根节点入队,进入循环;
    判断队列是否为空,将元素一个一个出队,将子女一个一个入队,每次出队的元素都为一个层次中的。
var levelOrder = function(root) {
    var nodes = []
    var queue = []
    if(root == null) return nodes
    queue.push(root)
    while(queue.length != 0){
        var temp = []  
        var n = queue.length
        for(var i = 0; i< n; i++){
            var node = queue.shift()
            temp.push(node.val)
            if(node.left!=null) queue.push(node.left)
            if(node.right!=null) queue.push(node.right)
        }
        nodes.push(temp)
    }
    return nodes
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 上次写了二叉树遍历,其中在非递归的遍历中,只写了前序遍历,没有写非递归中序遍历和后续遍历。非递归要用到栈,只要根据...
    BrianAguilar阅读 3,321评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,442评论 0 13
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,023评论 8 265
  • 今天一辆轩逸故障灯亮进厂 问询得知七万公里没有更换过火花塞 之前一直在4S店维修 通过隔壁洗车家老板和装修老...
    31马赫阅读 1,067评论 0 0
  • 姑且拾起笑容 与我握别 请不要再沉默 火车的鸣笛 震碎了梦 树上的鸟雀 请为我保守这个秘密 不要去路口张扬 我曾经来过
    方城子夜阅读 2,548评论 4 1

友情链接更多精彩内容