zoukankan      html  css  js  c++  java
  • 每天1题算法题(5)- 二叉树展开为链表

    给定一个二叉树,原地将它展开为一个单链表。

     解答

    将二叉树展开为单链表之后,单链表中的节点顺序即为二叉树的前序遍历访问各节点的顺序

    递归实现

    class Solution {
    
        private TreeNode curNode;
    
        public void flatten(TreeNode root) {
            List<TreeNode> treeNodeList = new ArrayList();
            preOrder(root, treeNodeList);
            for(int i=1; i < treeNodeList.size(); i++) {
                root.right = treeNodeList.get(i);
                root.left = null;
                root = root.right;
            }
           
        }
    
        private void preOrder(TreeNode node, List<TreeNode> treeNodeList) {
            if(node == null) {
                return;
            }
            treeNodeList.add(node);
            preOrder(node.left, treeNodeList);
            preOrder(node.right, treeNodeList);
        }
    }

     迭代实现

    class Solution {
    
        private TreeNode curNode;
    
        public void flatten(TreeNode root) {
            if(root == null) {
                return;
            }
            List<TreeNode> list = new ArrayList();
            Stack<TreeNode> stack = new Stack();
            stack.push(root);
            while(!stack.isEmpty()) {
                TreeNode treeNode = stack.pop();
                list.add(treeNode);
    
                if(treeNode.right != null){
                    stack.push(treeNode.right);
                }
                if(treeNode.left != null){
                    stack.push(treeNode.left);
                }
                
            }
    
            for(int i=1;i<list.size();i++) {
                root.right = list.get(i);
                root.left = null;
                root = root.right;
            }
        }
    }
  • 相关阅读:
    JS,JQuery的扩展方法
    Listbox简单用法
    Button模板,样式
    WPF开发经验
    弹出窗体主体实现事件
    从一知半解到揭晓Java高级语法—泛型
    深入理解Java之装箱与拆箱
    探究 — 二叉搜索树
    深入理解二叉树(超详细)
    二分查找及其变种算法
  • 原文地址:https://www.cnblogs.com/s648667069/p/13714510.html
Copyright © 2011-2022 走看看