二叉树最左下节点、二叉树最左节点:
二叉树每行最左边节点
方法一:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# https://blog.csdn.net/doujinlong1/article/details/85265159
class Solution:
def TreeDeep(self, pRoot):
if not pRoot:
return 0
left = self.TreeDeep(pRoot.left) + 1
right = self.TreeDeep(pRoot.right) + 1
return left if left > right else right
def readLevelLeft(self, node, i):
reString = ""
if (not node or i<1):
return ""
if (i == 1):
return str(node.val)
reString = self.readLevelLeft(node.left, i-1)
if (reString==""):
reString = self.readLevelLeft(node.right, i-1)
return reString
def levelOrderBottom(self, root):
if not root:
return
depth = self.TreeDeep(root)
for i in range(1, 1+depth):
re = self.readLevelLeft(root,i)
print re
方法二:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def printRightNode(self, root):
q1, q2 = [], []
tmp = TreeNode(0)
if (not root):
return
q1.append(root)
while len(q1) != 0 or len(q2) != 0:
count1 = 0
while len(q1) != 0:
tmp = q1[0]
q1.pop(0)
if count1 == 0:
print(tmp.val)
count1 += 1
if (tmp.left):
q2.append(tmp.left)
if (tmp.right):
q2.append(tmp.right)
count2 = 0
while len(q2) != 0:
tmp = q2[0]
q2.pop(0)
if count2 == 0:
print(tmp.val)
count2 += 1
if (tmp.left):
q1.append(tmp.left)
if (tmp.right):
q1.append(tmp.right)
def levelOrderBottom(self, root):
if not root:
return
self.printRightNode(root)