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;
            }
        }
    }
  • 相关阅读:
    第三章 操作符
    exit函数
    详解C++ friend关键字
    放假了,暂告一段落,迎接研究生
    使用const 提高函数的健壮性
    使用断言assert
    对return 语句的正确性和效率进行检查
    函数堆栈
    somethings about QSplitter
    引用和引用参数
  • 原文地址:https://www.cnblogs.com/s648667069/p/13714510.html
Copyright © 2011-2022 走看看