Leetcode算法【114. 二叉树展开为链表】
Algorithm LeetCode算法
1 / \ 2 5 / \ \3 4 6
1 \ 2 \ 3 \ 4 \ 5 \ 6
解法:后序遍历法
// 将二叉树构建完成public static void main(String[] args) { TreeNode treeNode = new TreeNode(1); treeNode.left = new TreeNode(2); treeNode.left.left = new TreeNode(3); treeNode.left.right = new TreeNode(4); treeNode.right = new TreeNode(5); treeNode.right.right = new TreeNode(6); flattern(treeNode);}/** * * @Title : * @Description: 后续遍历 * @param treeNode * @return :void * @throws */public static void flattern(TreeNode root) { Stack<TreeNode> treeNodes = new Stack<>(); TreeNode current = root; TreeNode preview = null; while (current != null || !treeNodes.isEmpty()) { while (current != null) { // 添加根节点 treeNodes.push(current); // 添加右节点 current = current.right; } // 已经访问到最右边的节点 current = treeNodes.peek(); // 当右节点已经被访问过或者左节点不存在的情况,就去访问根节点 if (current.left == null || current.left == preview) { treeNodes.pop(); current.right = preview; current.left = null; preview = current; current = null; } else { current = current.left; } }}补充说明:先序遍历
public static void flatten1(TreeNode root) { if (root == null){ return; } Stack<TreeNode> s = new Stack<TreeNode>(); s.push(root); TreeNode pre = null; while (!s.isEmpty()) { TreeNode temp = s.pop(); if(pre!=null){ pre.right = temp; pre.left = null; } if (temp.right != null){ s.push(temp.right); } if (temp.left != null){ s.push(temp.left); } pre = temp; }}结语

浙公网安备 33010602011771号