private LinkedList <TreeNodeFather> BFS(TreeNode root) { LinkedList <(TreeNodeFather, TreeNode)> queue = new LinkedList <(TreeNodeFather, TreeNode)>(); TreeNodeFather rootFather = new TreeNodeFather(root, null, false); LinkedList <TreeNodeFather> result = new LinkedList <TreeNodeFather>(); queue.AddLast((rootFather, root)); while (queue.Count != 0) { (var nodeFather, var node) = queue.First.Value; queue.RemoveFirst(); bool isLeave = true; if (node.left != null) { nodeFather.left = new TreeNodeFather(node.left, nodeFather, true); queue.AddLast((nodeFather.left as TreeNodeFather, node.left)); isLeave = false; } if (node.right != null) { nodeFather.right = new TreeNodeFather(node.right, nodeFather, false); queue.AddLast((nodeFather.right as TreeNodeFather, node.right)); isLeave = false; } if (isLeave) { result.AddLast(nodeFather); } } return(result); }
public TreeNodeFather(TreeNode node, TreeNodeFather father, bool isLeftChild) : base(node.val) { Father = father; if (father != null) { if (isLeftChild) { father.left = node; } else { father.right = node; } } }