예제 #1
0
function traverseTree($rootNode)
{
    if ($rootNode->left != null) {
        traverseTree($rootNode->left);
    }
    if ($rootNode->right != null) {
        traverseTree($rootNode->right);
    }
    echo $rootNode->data;
}
예제 #2
0
function traverseTree($tree, $startNode)
{
    if (is_numeric($startNode)) {
        return (int) $startNode;
    } else {
        if (array_key_exists($startNode, $GLOBALS['calculated'])) {
            return (int) $GLOBALS['calculated'][$startNode];
        } else {
            $result = 0;
            $thisNode = $tree[$startNode];
            if (is_array($thisNode)) {
                switch ($thisNode[0]) {
                    case "NOT":
                        $result = log_not(traverseTree($tree, $thisNode[1]));
                        break;
                    case "AND":
                        $result = (int) traverseTree($tree, $thisNode[1]) & (int) traverseTree($tree, $thisNode[2]);
                        break;
                    case "OR":
                        $result = (int) traverseTree($tree, $thisNode[1]) | (int) traverseTree($tree, $thisNode[2]);
                        break;
                    case "RSHIFT":
                        $result = (int) traverseTree($tree, $thisNode[1]) >> (int) $thisNode[2];
                        break;
                    case "LSHIFT":
                        $result = (int) traverseTree($tree, $thisNode[1]) << (int) $thisNode[2];
                        break;
                    default:
                        die("Do not enter default!");
                }
            } else {
                if (is_numeric($thisNode)) {
                    $result = $thisNode;
                } else {
                    $result = (int) traverseTree($tree, $thisNode);
                }
            }
            $GLOBALS['calculated'][$startNode] = $result;
            return $result;
        }
    }
}