Exemplo n.º 1
0
            queue.append(root)
            while queue:
                node = queue.pop(0)
                levelNo = levels.pop(0)
                if lastLevel != levelNo:
                    result.append(tList)
                    tList = []
                    lastLevel = levelNo
                tList.append(node.val)
                if node.left:
                    queue.append(node.left)
                    levels.append(levelNo + 1)
                if node.right:
                    queue.append(node.right)
                    levels.append(levelNo + 1)
        result.append(tList)
        return result


# Testing
node1 = TreeNode(3)
node2 = TreeNode(2)
node3 = TreeNode(5)
node4 = TreeNode(1)
node1.left = node2
node1.right = node3
node2.left = node4

solution = Solution()
print(solution.levelOrder(node1))
class Solution(object):
    def lowestCommonAncestor(self, root, p, q):
        if (root is None) or (p is None) or (q is None) or (not isinstance(root,TreeNode)) or (not isinstance(p,TreeNode)) or (not isinstance(q,TreeNode)):
            return None
        if root.val==p.val or root.val==q.val:
            return root
        nodeLeft = self.lowestCommonAncestor(root.left,p,q)
        nodeRight = self.lowestCommonAncestor(root.right,p,q)
        if (nodeLeft is not None) and (nodeRight is not None):
            return root
        return nodeLeft if (nodeLeft is not None) else nodeRight



#Testing
node1 = TreeNode(3)
node2 = TreeNode(5)
node3 = TreeNode(1)
node4 = TreeNode(6)
node5 = TreeNode(2)
node6 = TreeNode(7)
node7 = TreeNode(4)
node8 = TreeNode(0)
node9 = TreeNode(8)
node10 = TreeNode(10)
node11 = TreeNode(11)

node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
Exemplo n.º 3
0
from treeStructure import TreeNode
class Solution():
    def findDiameter(self, root):
        if not root:
            return 0
        else:
            lH,rH = self.treeHeight(root.left),self.treeHeight(root.right)
            return max(1+lH+rH,self.findDiameter(root.left),self.findDiameter(root.right))

    def treeHeight(self,root):
        if not root:
            return 0
        else:
            return 1 + max(self.treeHeight(root.left),self.treeHeight(root.right))

#Testing
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left  = TreeNode(4)
root.left.right = TreeNode(5)
print(Solution().findDiameter(root))