var collection = {
    nodeValue: 7,
    left: {
        nodeValue: 4,
        left: 2,
        right: {
            nodeValue: 6,
            left: 5,
            right: 9
        }
    },
    right: {
        nodeValue: 9,
        left: 8
    }
};

function iterateTreeValues(node, callback) {
    if (node === null || node === undefined) {
        return;
    }

    if (typeof node === 'object') {
        if ('left' in node) {
            iterateTreeValues(node.left, callback);
        }
        if ('nodeValue' in node) {
            callback(node.nodeValue);
        }
        if ('right' in node) {
            iterateTreeValues(node.right, callback);
        }
    } else {
        // Ponieważ jest to liść, węzeł jest wartością
        callback(node);
    }
}

var valuesArray = [];
iterateTreeValues(collection, function(value) {
    if (value > 4) {
        valuesArray.push(value);
    }
});
console.log(valuesArray);
