[路飞]生成随机的二叉树

475 阅读1分钟

生成 1 到 n 的随机节点的二叉树的输出前序遍历和中序遍历来加深前序遍历 中序遍历的理解

第一步:创建一个二叉树结构

class TreeNode() {
    constructor(val, left, right) {
        this.val = (val===undefined ? 0 : val)
        this.left = (left===undefined ? null : left)
        this.right = (right===undefined ? null : right
    }
}

第二步:随机插入节点

function insertRandomNode(root, val) {
    if (root === null) return new TreeNode(val)
    // 随机插入left 或 right
    if (Math.random() > 0.5) {
        root.left = insertRandomNode(root.left, val)
    } lese {
        root.right = insertRandomNode(root.right, val)
    }
    return root
}

第三步: 生成一个n个节点 val [1, n]的二叉树

function buildRandomTree(n) {
    let root = null
    
    for (let i = 0; i <= n; i++) {
        root = insertRandomNode(i)
    }
    
    return root
}

第四部: 测试下

// 生成3个长度是5的tree
for (let i = 0; i < 3; i++) {
    console.log(buildRandomTree(5))
}

{"val":1,"left":{"val":2,"left":{"val":5,"left":null,"right":null},"right":null},"right":{"val":3,"left":null,"right":{"val":4,"left":null,"right":null}}}

{"val":1,"left":{"val":2,"left":{"val":4,"left":null,"right":null},"right":null},"right":{"val":3,"left":{"val":5,"left":null,"right":null},"right":null}}

{"val":1,"left":{"val":2,"left":{"val":5,"left":null,"right":null},"right":{"val":3,"left":null,"right":null}},"right":{"val":4,"left":null,"right":null}}