树的相关操作

  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
};

你可能感兴趣的:(树的相关操作)